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

パブリック・アカウント・キー

AccountKeyPublicは、1つの公開鍵を持つアカウントに使用される。 AccountKeyPublic is used for accounts having one public key.
AccountKeyPublic is used for accounts having one public key.
If an account has an AccountKeyPublic object, the transaction validation process is done like below:

ethers.jsにkaiaの機能を追加するために、ethersおよび @kaiachain/ethers-extパッケージをインポートする。

変更する送信者address、送信者private keynew private keyを定義します。

指定されたKairos testnet URLでプロバイダを設定します。 エーテルにおけるプロバイダーとは、ブロックチェーンのデータにアクセスするための読み取り専用の抽象化されたものである。

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

private keyプロバイダーを使って送信者のウォレットを作成する。

新しい秘密鍵からpublic keyを計算する。

型がAccountKeyType.Publicで、keyフィールドに新しい計算されたpublic keyを持つトランザクションを宣言する。

ブロックチェーンに送信する。 関数 sendTransaction は内部的にアカウントの秘密鍵で署名し、ブロックチェーンネットワークに送信する。

wait関数は、ブロックチェーン上でtx受信が完了すれば、それを返す。

AccountUpdateWithPubKey.js

const { ethers } = require("ethers");
const { Wallet, TxType, AccountKeyType } = require("@kaiachain/ethers-ext");
// Using senderPriv == senderNewPriv to execute this example repeatedly.
// But you should use AccountKeyPublic to register a different private key.
const senderAddr = "0xe15cd70a41dfb05e7214004d7d054801b2a2f06b";
const senderPriv = "0x0e4ca6d38096ad99324de0dde108587e5d7c600165ae4cd6c2462c597458c2b8";
const senderNewPriv = "0x0e4ca6d38096ad99324de0dde108587e5d7c600165ae4cd6c2462c597458c2b8";
const provider = new ethers.providers.JsonRpcProvider("https://public-en-kairos.node.kaia.io");
const wallet = new Wallet(senderAddr, senderPriv, provider); // decoupled account
async function main() {
const senderNewPub = ethers.utils.computePublicKey(senderNewPriv, true);
console.log("pub", senderNewPub);
const tx = {
type: TxType.AccountUpdate,
from: senderAddr,
key: {
type: AccountKeyType.Public,
key: senderNewPub,
}
};
const sentTx = await wallet.sendTransaction(tx);
console.log("sentTx", sentTx.hash);
const receipt = await sentTx.wait();
console.log("receipt", receipt);
}
main().catch(console.error);

output

❯ js AccountUpdateWithPubKey.js
pub 0x03dc9dccbd788c00fa98f7f4082f2f714e799bc0c29d63f04d48b54fe6250453cd
sentTx 0x33a634875a49d8915bc6fde14f351b81d1fc470b64aef28bf95d3ea92f2dc4f7
receipt {
to: '0xe15Cd70A41dfb05e7214004d7D054801b2a2f06b',
from: '0xe15Cd70A41dfb05e7214004d7D054801b2a2f06b',
contractAddress: null,
transactionIndex: 1,
gasUsed: BigNumber { _hex: '0xa028', _isBigNumber: true },
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
blockHash: '0xb385b18c2e96c36e7fbbeb121cf2a48c0bb15f1a7af2f2969b133236ff7a14ea',
transactionHash: '0x33a634875a49d8915bc6fde14f351b81d1fc470b64aef28bf95d3ea92f2dc4f7',
logs: [],
blockNumber: 152203491,
confirmations: 2,
cumulativeGasUsed: BigNumber { _hex: '0x02e456', _isBigNumber: true },
effectiveGasPrice: BigNumber { _hex: '0x05d21dba00', _isBigNumber: true },
status: 1,
type: 0,
byzantium: true
}

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