DEPLOYMENT / FACTORY
登録済みの実装から、コントラクトを作成する
Factory SDKは、登録済みの実装から新しいコントラクトを作成します。実装の種類と初期化条件を指定し、アプリケーションからデプロイを実行できます。
実行前の準備
対象チェーン上のFactory、登録済み実装の所有者と種類、初期化関数のシグネチャと引数、実行権限を持つSignerを用意します。型名と初期化条件は、そのFactoryに登録されたものを指定します。
bash
npm install --save-exact @hazbase/factory@0.2.1 ethers@6.16.0アプリケーションから呼び出す
接続済みのSignerと登録情報をこの関数に渡すと、初期化の呼び出しデータを生成し、Factory経由でコントラクトを作成できます。サンプルの接続先と引数は、ご利用の環境に合わせて指定してください。
factory-clone.ts
import { deployViaFactory, type DeployViaFactoryOptions } from '@hazbase/factory';
import { getAddress, type Signer } from 'ethers';
type CloneRequest = {
signer: Signer;
chainId: number;
factoryAddress: string;
implementationOwner: string;
contractType: string;
fnSignature: string;
fnArgs: readonly unknown[];
};
// Call only after the implementation and its initializer policy are registered.
export async function createRegisteredClone(request: CloneRequest) {
if (!request.signer.provider) throw new Error('A connected signer is required.');
const network = await request.signer.provider.getNetwork();
if (network.chainId !== BigInt(request.chainId)) throw new Error('Chain mismatch.');
const options = {
signer: request.signer,
chainId: request.chainId,
factoryAddress: getAddress(request.factoryAddress),
implementationOwner: getAddress(request.implementationOwner),
contractType: request.contractType,
fnSignature: request.fnSignature,
fnArgs: request.fnArgs,
} satisfies DeployViaFactoryOptions;
const result = await deployViaFactory(options);
return { address: result.proxy, transactionHash: result.txHash, receipt: result.receipt };
}
結果を確認する
addressは作成したプロキシ、transactionHashは作成トランザクション、receiptは確定した実行結果です。初期化後の名称・管理者・上限なども読み取り、渡した条件との一致を確認できます。
DeployViaFactoryOptions引数・戻り値の正式な仕様