您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Stellar/XLM交易創(chuàng)建的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Stellar/XLM交易創(chuàng)建的方法是什么”吧!
Stellar交易是可以改變賬本狀態(tài)的命令,包括支付、創(chuàng)建委托單、修改賬戶配置等。每個交易 都有一個源賬戶負責(zé)支付交易手續(xù)費并占用一個交易序列號。一個Stellar交易包含一個或多個操作, 每個操作都有一個源賬戶,默認為交易的源賬戶。
JS Stellar SDK的TransactionBuilder
類用來構(gòu)建新的交易,其構(gòu)造函數(shù)需要指定一個賬戶作為交易的源賬戶。當(dāng)TransactionBuilder
的build()
方法被調(diào)用時,將遞增源賬戶的交易序列號。
可以使用addOperatioins()
方法向Stellar交易對象中添加操作。你可以查看operation.js中列出的可用操作,該方法返回當(dāng)前的TransactionBuilder對象,因此你可以鏈?zhǔn)綀?zhí)行該方法多次。
在添加了期望的操作后,調(diào)用build()
方法生成Stellar交易,該交易中將包含所指定源賬戶的交易序列號。該交易是未簽名的,在發(fā)送到Stellar網(wǎng)絡(luò)之前必須先進行簽名。
// StellarBase.Network.usePublicNetwork(); 使用Stellar主鏈 // 使用指定地址和序列號創(chuàng)建Stellar賬號對象 var account=new StellarBase.Account( "GD6WU64OEP5C4LRBH6NK3MHYIA2ADN6K6II6EXPNVUR3ERBXT4AN4ACD", "2319149195853854" ); var transaction = new StellarBase.TransactionBuilder(account, { fee: StellarBase.BASE_FEE, networkPassphrase: Networks.TESTNET }) // 添加支付操作 .addOperation(StellarBase.Operation.payment({ destination: "GASOCNHNNLYFNMDJYQ3XFMI7BYHIOCFW3GJEOWRPEGK2TDPGTG2E5EDW", asset: StellarBase.Asset.native(), amount: "100.50" // 100.50 XLM })) // 添加選項配置操作 .addOperation(StellarBase.Operation.setOptions({ signer: { ed25519PublicKey: secondAccountAddress, weight: 1 } })) // 設(shè)置交易超時 .setTimeout(30) .build();
Stellar交易中的序列號必須與交易源賬戶的序列號一致,否則交易被視為無效。在交易被提交并應(yīng)用到賬本后,源賬戶的序列號會加1。
有兩個方法可以確保得到正確的序列號:
在提交交易之前讀取員賬戶的序列號
本地管理序列號
在交易吞吐量處于高位時,從網(wǎng)絡(luò)中提取源賬戶的序列號可能不會返回正確的值。因此,如果你在高頻提交大量交易,應(yīng)該在本地跟蹤序列號。
Stellar交易中可以包含一個memo
字段用來附加額外的備注信息??梢栽趧?chuàng)建TransactionBuilder
時傳入一個備注對象。有5種類型的備注對象:
Memo.none:空的備注
Memo.text:28字節(jié)ascii編碼的字符串備注
Memo.id:64字節(jié)的數(shù)值備注
Memo.hash:32字節(jié)哈希,例如內(nèi)容服務(wù)器上某個條目的哈希
Memo.returnHash:32字節(jié)哈希,用于被拒絕交易
var memo = Memo.text('Happy birthday!'); var transaction = new StellarBase.TransactionBuilder(account, { memo: memo, fee: StellarBase.BASE_FEE, networkPassphrase: Networks.TESTNET }) .addOperation(StellarBase.Operation.payment({ destination: "GASOCNHNNLYFNMDJYQ3XFMI7BYHIOCFW3GJEOWRPEGK2TDPGTG2E5EDW", asset: StellarBase.Asset.native(), amount: "2000" })) .setTimeout(30) .build();
你可能不希望直接實例化交易對象,因為通常都是使用TransactionBuilder
來創(chuàng)建Stellar交易對象。然而,你也可以使用base64編碼的交易封包來創(chuàng)建一個新的交易對象。
var transaction = new Transaction(envelope);
一旦交易從封包中創(chuàng)建出來,其屬性和操作就不應(yīng)該再變化。在將該交易提交到Stellar網(wǎng)絡(luò)之前,你應(yīng)該只為該交易對象添加簽名。
最重要的是,你可以使用sign()
方法簽名一個交易對象,詳見下面說明。
Stellar交易需要簽名以便用于身份認證,通常在一個Stellar交易中只需要一個簽名。但是你可以通過增加交易需要的簽名來是實現(xiàn)更復(fù)雜的驗證控制,我們將在后續(xù)文章中介紹多重簽名機制。
可以使用交易對象的sign()
方法為Stellar交易添加簽名,同樣,可以鏈?zhǔn)秸{(diào)用sign()
方法多次。
Keypair
類用來表示在Stellar網(wǎng)絡(luò)中用于簽名交易的密鑰對。一個Keypair
對象中可以包含一個公鑰和一個私鑰,或者僅包含公鑰。
如果Keypair
對象不包含私鑰,那么你就不能用它來簽名交易。創(chuàng)建新的密鑰對的最方便的方法是傳入賬戶的密文種子:
var keypair = Keypair.fromSecret('SBK2VIYYSVG76E7VC3QHYARNFLY2EAQXDHRC7BMXBBGIFG74ARPRMNQM'); var address = keypair.publicKey(); // GDHMW6QZOL73SHKG2JA3YHXFDHM46SS5ZRWEYF5BCYHX2C5TVO6KZBYL var canSign = keypair.canSign(); // true
你可以使用密文種子的原始字節(jié)碼流來創(chuàng)建Keypair對象:
var keypair = Keypair.fromRawSeed([ 0xdc, 0x9c, 0xbf, 0xb5, 0xd7, 0x12, 0x83, 0x6a, 0xbf, 0x7d, 0x5d, 0xd8, 0xc4, 0xc4, 0x3e, 0x9d, 0xc7, 0x81, 0x85, 0xf1, 0x4b, 0x12, 0x0e, 0x9b, 0x59, 0x5d, 0x62, 0x65, 0x52, 0xa8, 0xcb, 0xcc]); var address = keypair.publicKey(); // GADMPH2LB7VDK4UHNGKMJIJBXC5WTWTQMXYWSPVWPMNVVR4MGWLI2IXN var canSign = keypair.canSign(); // true
你也可以創(chuàng)建一個隨機生成的密鑰對:
var keypair = Keypair.random();
有了包含私鑰的密鑰對,就可以簽名交易了:
var key1 = Keypair.fromSecret('SBK2VIYYSVG76E7VC3QHYARNFLY2EAQXDHRC7BMXBBGIFG74ARPRMNQM'); var key2 = Keypair.fromSecret('SAMZUAAPLRUH62HH3XE7NVD6ZSMTWPWGM6DS4X47HLVRHEBKP4U2H5E7'); // 使用指定地址和序列號創(chuàng)建Account對象 var account=new StellarBase.Account( "GD6WU64OEP5C4LRBH6NK3MHYIA2ADN6K6II6EXPNVUR3ERBXT4AN4ACD","2319149195853854" ); var transaction = new StellarBase.TransactionBuilder(account, { fee: StellarBase.BASE_FEE, networkPassphrase: Networks.TESTNET }) .addOperation(StellarBase.Operation.payment({ destination: "GASOCNHNNLYFNMDJYQ3XFMI7BYHIOCFW3GJEOWRPEGK2TDPGTG2E5EDW", asset: StellarBase.Asset.native(), amount: "2000" // 2000 XLM })) .setTimeout(30) .build(); transaction.sign(key1); transaction.sign(key2); // 將交易對象提交到Horizon API服務(wù)
到此,相信大家對“Stellar/XLM交易創(chuàng)建的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。