1

最近、アカウントを作成し、2 つの確認 (署名) が必要なマルチシグ契約を展開しましたが、フル アクセス キーは 1 つしかありませんでした。確認数を1に設定するなど、コントラクトで何もできませんでした... Near shell、near repl、またはnear-api-jsを使用してキーを追加するにはどうすればよいですか?

例えば

near create_account msig --masterAccount account.testnet --initialBalance 50
near deploy --accountId msig --wasmFile ./contract/res/multisig.wasm
near call msig new '{"num_confirmations":2}' --account_id msig

この時点で、マルチシグが展開され、 でインスタンス化されますがnum_confirmations = 2、キーは 1 つしかありません。フル アクセス アカウント キー。

マルチシグリクエストを確認できるように別のキーを追加するにはどうすればよいですか?

4

1 に答える 1

0

まず、アカウントに追加する新しいキーを生成する必要があります。msig.lak1アカウントに新しい制限付きアクセス キー (LAK) を追加するため、キーに名前を付けますmsig

near generate-key msig.lak1

生成された公開鍵をコピーします。

マルチシグ コントラクトのようconfirmに、後で参照して tx に署名するために、secretKey は次の場所にあります。code ~/.near-credentials/default/msig.lak1.json

これをアカウントに追加する必要がありますmsig

Near shell は新しいキーをアカウントに追加する機能を提供しないため、near repl を使用する必要があります。

完全なアクセス キーが 1 つだけのマルチシグ契約アカウントnear replの accountIdで起動します。msig

near repl --accountId msig
>

更新:(@ vlad-grichinaコメントに感謝)

await account.addKey("PUBLIC KEY FROM GENERATE KEY", contractName, 'confirm')

これはシングル アクション tx であるためです。

前へ: (アクションをバンドルする場合)

次に、トランザクションを作成addKeyし、アカウントを使用して署名しmsigます。

const contractName = "msig"
const result = account.signAndSendTransaction('msig', [
    nearAPI.transactions.addKey(nearAPI.utils.PublicKey.from("PUBLIC KEY FROM GENERATE KEY"), nearAPI.transactions.functionCallAccessKey(contractName, ['confirm'], null)),
])

キーが追加されたことをニアシェルを使用して確認できます。

near keys msig

これで、秘密鍵を使用してマルチシグ コントラクト リクエストを確認できます。

// in my JS app
await window.keyStore.setKey(
    NETWORK_ID, contractName,
    // from ~/.near-credentials/default/msig.lak1.json
    nearApi.KeyPair.fromString(secretKey)
)
const contract = new nearApi.Contract(window.contractAccount, contractName, {
    changeMethods: ['confirm'],
    sender: contractName
})
...
contract.confirm({ request_id: X }) // confirms request 

また、エクスプローラーでチェックインして、アクセス キー tx の追加が成功したことを確認できます: https://explorer.testnet.near.org/accounts/msig エクスプローラーからアクセスキー画像を追加

于 2020-06-09T15:31:31.050 に答える