91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Stellar/XLM交易創建的方法是什么

發布時間:2021-12-29 14:27:22 來源:億速云 閱讀:151 作者:iii 欄目:互聯網科技

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

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

1、Stellar交易構造器

JS Stellar SDK的TransactionBuilder類用來構建新的交易,其構造函數需要指定一個賬戶作為交易的源賬戶。當TransactionBuilderbuild()方法被調用時,將遞增源賬戶的交易序列號。

可以使用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();

2、Stellar交易序列號

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

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

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

  • 本地管理序列號

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

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

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

4、將base64碼流轉換為Stellar交易對象

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

var transaction = new Transaction(envelope);

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

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

5、Stellar交易的簽名

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交易創建的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜南县| 康平县| 滁州市| 青岛市| 蒙山县| 乌鲁木齐县| 公安县| 金塔县| 凤山市| 兴仁县| 兴宁市| 内黄县| 长宁区| 马龙县| 河源市| 故城县| 来凤县| 贺兰县| 武平县| 油尖旺区| 拉萨市| 盐边县| 阳城县| 龙州县| 甘肃省| 台湾省| 东乡| 湖口县| 南郑县| 玉树县| 阿图什市| 万全县| 偏关县| 西昌市| 普兰店市| 双辽市| 错那县| 彭州市| 阜平县| 灵石县| 金平|