您好,登錄后才能下訂單哦!
本篇內容主要講解“Stellar/XLM交易創建的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Stellar/XLM交易創建的方法是什么”吧!
Stellar交易是可以改變賬本狀態的命令,包括支付、創建委托單、修改賬戶配置等。每個交易 都有一個源賬戶負責支付交易手續費并占用一個交易序列號。一個Stellar交易包含一個或多個操作, 每個操作都有一個源賬戶,默認為交易的源賬戶。
JS Stellar SDK的TransactionBuilder
類用來構建新的交易,其構造函數需要指定一個賬戶作為交易的源賬戶。當TransactionBuilder
的build()
方法被調用時,將遞增源賬戶的交易序列號。
可以使用addOperatioins()
方法向Stellar交易對象中添加操作。你可以查看operation.js中列出的可用操作,該方法返回當前的TransactionBuilder對象,因此你可以鏈式執行該方法多次。
在添加了期望的操作后,調用build()
方法生成Stellar交易,該交易中將包含所指定源賬戶的交易序列號。該交易是未簽名的,在發送到Stellar網絡之前必須先進行簽名。
// StellarBase.Network.usePublicNetwork(); 使用Stellar主鏈 // 使用指定地址和序列號創建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 } })) // 設置交易超時 .setTimeout(30) .build();
Stellar交易中的序列號必須與交易源賬戶的序列號一致,否則交易被視為無效。在交易被提交并應用到賬本后,源賬戶的序列號會加1。
有兩個方法可以確保得到正確的序列號:
在提交交易之前讀取員賬戶的序列號
本地管理序列號
在交易吞吐量處于高位時,從網絡中提取源賬戶的序列號可能不會返回正確的值。因此,如果你在高頻提交大量交易,應該在本地跟蹤序列號。
Stellar交易中可以包含一個memo
字段用來附加額外的備注信息。可以在創建TransactionBuilder
時傳入一個備注對象。有5種類型的備注對象:
Memo.none:空的備注
Memo.text:28字節ascii編碼的字符串備注
Memo.id:64字節的數值備注
Memo.hash:32字節哈希,例如內容服務器上某個條目的哈希
Memo.returnHash:32字節哈希,用于被拒絕交易
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
來創建Stellar交易對象。然而,你也可以使用base64編碼的交易封包來創建一個新的交易對象。
var transaction = new Transaction(envelope);
一旦交易從封包中創建出來,其屬性和操作就不應該再變化。在將該交易提交到Stellar網絡之前,你應該只為該交易對象添加簽名。
最重要的是,你可以使用sign()
方法簽名一個交易對象,詳見下面說明。
Stellar交易需要簽名以便用于身份認證,通常在一個Stellar交易中只需要一個簽名。但是你可以通過增加交易需要的簽名來是實現更復雜的驗證控制,我們將在后續文章中介紹多重簽名機制。
可以使用交易對象的sign()
方法為Stellar交易添加簽名,同樣,可以鏈式調用sign()
方法多次。
Keypair
類用來表示在Stellar網絡中用于簽名交易的密鑰對。一個Keypair
對象中可以包含一個公鑰和一個私鑰,或者僅包含公鑰。
如果Keypair
對象不包含私鑰,那么你就不能用它來簽名交易。創建新的密鑰對的最方便的方法是傳入賬戶的密文種子:
var keypair = Keypair.fromSecret('SBK2VIYYSVG76E7VC3QHYARNFLY2EAQXDHRC7BMXBBGIFG74ARPRMNQM'); var address = keypair.publicKey(); // GDHMW6QZOL73SHKG2JA3YHXFDHM46SS5ZRWEYF5BCYHX2C5TVO6KZBYL var canSign = keypair.canSign(); // true
你可以使用密文種子的原始字節碼流來創建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
你也可以創建一個隨機生成的密鑰對:
var keypair = Keypair.random();
有了包含私鑰的密鑰對,就可以簽名交易了:
var key1 = Keypair.fromSecret('SBK2VIYYSVG76E7VC3QHYARNFLY2EAQXDHRC7BMXBBGIFG74ARPRMNQM'); var key2 = Keypair.fromSecret('SAMZUAAPLRUH62HH3XE7NVD6ZSMTWPWGM6DS4X47HLVRHEBKP4U2H5E7'); // 使用指定地址和序列號創建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服務
到此,相信大家對“Stellar/XLM交易創建的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。