本文へスキップ
このページは英語からの機械翻訳を使用しており、誤りや不明瞭な表現が含まれている可能性があります。最も正確な情報については、オリジナルの英語版をご覧ください。頻繁な更新のため、一部のコンテンツはオリジナルの英語になっている可能性があります。Crowdinでの取り組みに参加して、このページの翻訳改善にご協力ください。 (Crowdin translation page, Contributing guide)

マルチシグ・アカウント・キー

AccountKeyWeightedMultiSigは、閾値とWeightedPublicKeys(公開鍵とその重みからなるリスト)を含むアカウント鍵タイプである。

AccountKeyWeightedMultiSigに関連付けられたアカウントで取引が有効であるためには、 以下の条件を満たす必要がある: 署名された公開鍵の加重和が閾値より大きいこと。 無効な署名はトランザクションに含めるべきでない。 * 署名された公開鍵の数は、weightedPublicKeysの数より少なくなければならない。

web3 および @kaiachain/web3js-ext パッケージをインポートして、Web3にKAIAの機能を追加します

送信者のaddressprivate key、およびすべての重み付きマルチシグ秘密鍵を定義する。

指定されたkairos testnet URLでプロバイダを設定します。 Web3におけるプロバイダーは、ブロックチェーンのデータにアクセスするための読み取り専用の抽象レイヤーです。

また、プロバイダのURLをkairosからquicknodeに変更することができます。

プロバイダーを使ってweb3インスタンスを定義する

最初のweight multi-sig秘密鍵とプロバイダーでウォレットを作成する。

署名され、復元されるメッセージを定義する

送信者の財布でメッセージに署名する。

web3.eth.accounts.recoverを使用して署名されたメッセージからアドレスを回復する。

web3.klay.recoverFromMessage を使って、署名されたメッセージからアドレスを復元する。

SignMsgWithMultiSigExample.js

const { Web3, TxType, AccountKeyType, toPeb, getPublicKeyFromPrivate } = require("@kaiachain/web3js-ext");
const senderAddr = "0x2bf611d14d330fd3688d10f2201321eacc8aa2ce";
const senderPriv1 = "0x31fadf868e68fd2e3f7a1c528023c9a86a45db850e9d6b82c1a82d4c75b469d1";
const senderPriv2 = "0x0e4ca6d38096ad99324de0dde108587e5d7c600165ae4cd6c2462c597458c2b8";
const senderPriv3 = "0xc9668ccd35fc20587aa37a48838b48ccc13cf14dd74c8999dd6a480212d5f7ac";
const provider = new Web3.providers.HttpProvider("https://public-en-kairos.node.kaia.io");
const web3 = new Web3(provider);
async function main() {
const senderAccount = web3.eth.accounts.privateKeyToAccount(senderPriv1);
const msg = "hello";
const msghex = Web3.utils.utf8ToHex(msg);
const signResult = senderAccount.sign(msg);
console.log({ senderAddr, msg, msghex, sig: signResult.signature });
const { v, r, s } = signResult;
const addr1 = web3.eth.accounts.recover(msg, v, r, s);
console.log("recoveredAddr lib", addr1, addr1.toLowerCase() === senderAccount.address.toLowerCase());
const sig = signResult.signature;
const addr2 = await web3.klay.recoverFromMessage(senderAddr, msghex, sig, "latest");
console.log("recoveredAddr rpc", addr2, addr2.toLowerCase() === senderAccount.address.toLowerCase());
}
main().catch(console.error);

output

js SignMsgWithMultiSigExample.js
{
senderAddr: '0x2bf611d14d330fd3688d10f2201321eacc8aa2ce',
msg: 'hello',
msghex: '0x68656c6c6f',
sig:'0x514ad395399cb30533cd02f9681b44ed1452f5bb44289e5e2aa042fbc6ba6e2c393d7107e3f8341a240b30f481cc1fce0c66056ba8035c45fd66fcae086b409b1b'
}
recoveredAddr lib 0x2bf611d14d330fD3688D10F2201321eACc8AA2Ce true
recoveredAddr rpc 0x2bf611d14d330fd3688d10f2201321eACc8aa2ce true

ページを改善してください。