跳至主要內容
本頁面使用機器翻譯自英語,可能包含錯誤或不清楚的語言。如需最準確的信息,請參閱英文原文。由於更新頻繁,部分內容可能與英文原文有出入。請加入我們在 Crowdin 上的努力,幫助我們改進本頁面的翻譯。 (Crowdin translation page, Contributing guide)

發送交易示例

讓我們嘗試發送一筆交易作為簡單的熱身。 在這個簡短的示例中,我們將使用 caver-js 創建一個密鑰存儲、連接到 kaia 節點並創建一個事務!

如果您是第一次使用 caver-js,請不要擔心。 只需按照下面的簡單步驟操作即可。

前提條件

首先安裝以下軟件包

注: 安裝 nvm 後,如果出現 nvm: command not found 錯誤,請參閱此 troubleshooting guide

1. 創建賬戶並下載 Keystore

創建賬戶最簡單的方法是使用 Kaia 在線工具包

Kaia Online Toolkit

下載 keystore 文件,並將文件名改為更簡單的名稱,如 keystore.json

** 您需要 KAIA 才能發送交易。** 您可以從 Faucet 獲取用於 Kairos 測試網的測試 KLAY。 詳細說明請參閱 [Kaia Wallet](.../.../.../build/tools/wallets/klaytn-wallet.md#how-to-receive-baobab-testnet-klay)。

2. 初始化項目

首先,為我們的項目創建一個文件夾。 我們簡單地將其稱為 "test"。 導航到您的命令行,然後輸入:


mkdir test

現在,讓我們導航到我們的文件夾。


cd test

我們將在我們的文件夾中下載 caver-js。 但在此之前,我們必須檢查我們的 node.js 版本,因為我們必須使用 12 或 14 版本。

您可以像這樣檢查版本:


node --version

如果版本不是 12 或 14,務必更改。 在此,我們將使用版本(14.16.0)。 因此,讓我們輸入 nvm use 14.16.0 來更改節點版本。

現在,讓我們初始化我們的項目:


npm init

因為我們只是做一個簡單的測試,所以如何回答問題並不重要。 繼續按 enter


package name: (test)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /Users/terri.k/test/package.json:
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this OK? (yes)

或者,您也可以直接鍵入下面的命令,而不點擊 "enter":


npm init -y

3. 下載 caver-js

現在我們準備安裝 caver-js。


npm install caver-js

同時,添加以下模塊,因為我們需要它:


npm i read

4. 創建測試文件

讓我們像這樣創建一個名為 testcaver.js 的測試文件:


touch testcaver.js

我們將在該文件中編寫代碼,發送轉賬 KAIA 的交易。

5. 連接 kaia 節點

由於我們要向區塊鏈網絡發送交易,因此需要連接到 kaia 節點。 我們將使用 Kairos Testnet。

我們將導入 caver-jsread 模塊,並連接到 Kairos 網絡中的 kaia 節點,如下圖所示:


const Caver = require('caver-js')
const read = require('read')
const caver = new Caver('https://public-en-kairos.node.kaia.io/')

6. 提供 Keystore、創建 Keyring 並添加到 Caver 錢包

您需要一個賬戶才能在區塊鏈上進行交易。 賬戶信息包含在 keystore 中。 使用loadPassword()函數,我們可以在終端上實現密碼提示。 函數如下


async function loadPassword() {
return new Promise((resolve, reject)=> {
read({ prompt: 'Password: ', silent: true }, function(er, password) {
if(er) {
reject(er)
return
}
resolve(password)
})
})
}

從提示符輸入的密碼和同一目錄下的 keystore 文件將被解密,並存儲為 keyring 文件。

之後,"keyring "將被存儲在錢包中。 添加以下幾行:


async function sendKlay() {
// Read keystore json file
const fs = require('fs')
const keystore = fs.readFileSync('./keystore.json', 'utf8')
const password = await loadPassword()
// Decrypt keystore and create
const keyring = caver.wallet.keyring.decrypt(keystore, password)
console.log(keyring)
// Add to caver.wallet
caver.wallet.add(keyring)
}

7. 發送交易

現在,我們將創建一個交易來轉移一些 KAIA。 這類交易被稱為 "value transfer transaction"。 讓我們來分析一下每個參數。

from 地址來自我們上傳的 keystore。 to 地址是 KAIA 的接收方,可以使用任何地址。 對於 value, 您可以方便地使用 caver.utils.toPeb() 將 KAIA 轉換為 peb。 在這裡,我們將發送 10 KAIA。 對於 "gas"、


// Create value transfer transaction
const vt = caver.transaction.valueTransfer.create({
from: keyring.address,
to: '0x8084fed6b1847448c24692470fc3b2ed87f9eb47',
value: caver.utils.toPeb(10, 'KLAY'),
gas: 25000,
})
// Sign to the transaction
const signed = await caver.wallet.sign(keyring.address, vt)
// Send transaction to the kaia blockchain platform (kaia)
const receipt = await caver.rpc.klay.sendRawTransaction(signed)
console.log(receipt)
}

別忘了在最後添加:


sendKlay()

8. 運行代碼

讓我們運行一下剛才編寫的代碼:


node testcaver.js

Type your password

結果會是這樣的


SingleKeyring {
_address: '0x658750eaa5d4db896d9ad0de79e00d551e0bf808',
_key: PrivateKey {
_privateKey: '0xea296e1bc67ba18a9ca87161c9e4fe486bb805ffff4f7a453f621a45e341e076'
}
}
{
blockHash: '0x0c29221072f049cf08ec2112755cbc0bc55289de5337faf2911147a4d8229693',
blockNumber: '0x64e399d',
contractAddress: null,
effectiveGasPrice: '0x5d21dba00',
from: '0x658750eaa5d4db896d9ad0de79e00d551e0bf808',
gas: '0x61a8',
gasPrice: '0xba43b7400',
gasUsed: '0x5208',
logs: [],
logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
nonce: '0x0',
senderTxHash: '0xdef371f3b194de1d6b6b678a3181e0e961549f2bc8f6391f97f48c8ea995225e',
signatures: [
{
V: '0x7f6',
R: '0x6425f98285f8e680a9cbfe32de824cceedd7fdca91ba9f7fa513898bc0d01ea8',
S: '0x37718277df2a7a940212c9adb411f52d79d8cced784177c41224dca1a1ef122c'
}
],
status: '0x1',
to: '0x7f1d6235b79688169fd6e15c4e8f540d6799dc75',
transactionHash: '0xdef371f3b194de1d6b6b678a3181e0e961549f2bc8f6391f97f48c8ea995225e',
transactionIndex: '0x2',
type: 'TxTypeValueTransfer',
typeInt: 8,
value: '0x8ac7230489e80000'
}

您可以使用 transactionHashKaiascanKaiascope 中查看交易詳情。

9. 全部代碼


const Caver = require('caver-js')
const read = require('read')
const caver = new Caver('https://public-en-kairos.node.kaia.io/')
async function sendKLAY() {
// Read keystore json file
const fs = require('fs')
const keystore = fs.readFileSync('./keystore.json', 'utf8')
const password = await loadPassword()
// Decrypt keystore and create
const keyring = caver.wallet.keyring.decrypt(keystore, password)
console.log(keyring)
// Add to caver.wallet
caver.wallet.add(keyring)
// Create value transfer transaction
const vt = caver.transaction.valueTransfer.create({
from: keyring.address,
to: '0x7f1D6235B79688169fd6e15C4E8f540d6799dC75',
value: caver.utils.toPeb(10, 'KLAY'),
gas: 25000,
})
// Sign to the transaction
const signed = await caver.wallet.sign(keyring.address, vt)
// Send transaction to the kaia blockchain platform (kaia)
const receipt = await caver.rpc.klay.sendRawTransaction(signed)
console.log(receipt)
}
async function loadPassword() {
var read = require('read')
return new Promise((resolve, reject)=> {
read({ prompt: 'Password: ', silent: true }, function(er, password) {
if(er) {
reject(er)
return
}
resolve(password)
})
})
}
sendKLAY()

我希望您對使用 caver-js 提交的 Transacion 充滿信心。 如果您遇到困難或有任何問題,請隨時訪問我們的 Kaia 論壇 尋求幫助。

讓這個頁面變得更好