溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Stellar/XLM交易創(chuàng)建的方法是什么

發(fā)布時間:2021-12-29 14:27:22 來源:億速云 閱讀:140 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“Stellar/XLM交易創(chuàng)建的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Stellar/XLM交易創(chuàng)建的方法是什么”吧!

Stellar交易是可以改變賬本狀態(tài)的命令,包括支付、創(chuàng)建委托單、修改賬戶配置等。每個交易 都有一個源賬戶負責(zé)支付交易手續(xù)費并占用一個交易序列號。一個Stellar交易包含一個或多個操作, 每個操作都有一個源賬戶,默認為交易的源賬戶。

1、Stellar交易構(gòu)造器

JS Stellar SDK的TransactionBuilder類用來構(gòu)建新的交易,其構(gòu)造函數(shù)需要指定一個賬戶作為交易的源賬戶。當(dāng)TransactionBuilderbuild()方法被調(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();

2、Stellar交易序列號

Stellar交易中的序列號必須與交易源賬戶的序列號一致,否則交易被視為無效。在交易被提交并應(yīng)用到賬本后,源賬戶的序列號會加1。

有兩個方法可以確保得到正確的序列號:

  • 在提交交易之前讀取員賬戶的序列號

  • 本地管理序列號

在交易吞吐量處于高位時,從網(wǎng)絡(luò)中提取源賬戶的序列號可能不會返回正確的值。因此,如果你在高頻提交大量交易,應(yīng)該在本地跟蹤序列號。

3、在Stellar交易中添加備注信息

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();

4、將base64碼流轉(zhuǎn)換為Stellar交易對象

你可能不希望直接實例化交易對象,因為通常都是使用TransactionBuilder來創(chuàng)建Stellar交易對象。然而,你也可以使用base64編碼的交易封包來創(chuàng)建一個新的交易對象。

var transaction = new Transaction(envelope);

一旦交易從封包中創(chuàng)建出來,其屬性和操作就不應(yīng)該再變化。在將該交易提交到Stellar網(wǎng)絡(luò)之前,你應(yīng)該只為該交易對象添加簽名。

最重要的是,你可以使用sign()方法簽名一個交易對象,詳見下面說明。

5、Stellar交易的簽名

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í)!

向AI問一下細節(jié)

免責(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)容。

AI