如何创建和签署以太坊交易?

高分请说下,如何创建和签署以太坊交易?
最新回答
小晴日记

2024-10-24 04:58:32

交易

区块链交易的行为遵循不同的规则集

  • 由于公共区块链分布式和无需许可的性质,任何人都可以签署交易并将其广播到网络。

  • 根据区块链的不同,交易者将被收取一定的交易费用,交易费用取决于用户的需求而不是交易中资产的价值。

  • 区块链交易无需任何中央机构的验证。仅需使用与其区块链相对应的数字签名算法(DSA)使用私钥对其进行签名。

  • 一旦一笔交易被签名,广播到网络中并被挖掘到网络中成功的区块中,就无法恢复交易。

  • 以太坊交易结构

  • 以太坊交易的数据结构:交易0.1个ETH

    {
    'nonce':'0x00',  // 十进制:0
    'gasLimit': '0x5208', //十进制: 21000
    'gasPrice': '0x3b9aca00', //十进制1,000,000,000
    'to': '0x17A98d2b11Dfb784e63337d2170e21cf5DD04631' ,//发送地址
    'value': '0x16345785d8a0000',//100000000000000000 ,10^17
    'data': '0x', // 空数据的十进制表示
    'chainId': 1 // 区块链网络ID
    }

    这些数据与交易内容无关,与交易的执行方式有关,这是由于在以太坊中发送交易中,您必须定义一些其他参数来告诉矿工如何处理您的交易。交易数据结构有2个属性设计"gas": "gasPrice","gasLimit"。

  • "gasPrice": 单位为Gwei, 为 1/1000个eth,表示交易费用

  • "gasLimit": 交易允许使用的最大gas费用。

  • 这2个值通常由钱包提供商自动填写。

    除此之外还需要指定在哪个以太坊网络上执行交易(chainId): 1表示以太坊主网。

    在开发时,通常会在本地以及测试网络上进行测试,通过测试网络发放的测试ETH进行交易以避免经济损失。在测试完成后再进入主网交易。

    另外,如果需要提交一些其它数据,可以用"data"和"nonce"作为事务的一部分附加。

    A nonce(仅使用1次的数字)是以太坊网络用于跟踪交易的数值,有助于避免网络中的双重支出以及重放攻击。

  • 以太坊交易签名

    以太坊交易会涉及ECDSA算法,以Javascript代码为例,使用流行的ethers.js来调用ECDSA算法进行交易签名。

  • const ethers = require('ethers')

  • const signer = new ethers.Wallet('钱包地址')


  • signer.signTransaction({

  •  'nonce':'0x00',  // 十进制:0

  •    'gasLimit': '0x5208', //十进制: 21000

  •    'gasPrice': '0x3b9aca00', //十进制1,000,000,000

  •    'to': '0x17A98d2b11Dfb784e63337d2170e21cf5DD04631' ,//发送地址

  •    'value': '0x16345785d8a0000',//100000000000000000 ,10^17

  •    'data': '0x', // 空数据的十进制表示

  •    'chainId': 1 // 区块链网络ID

  • })

  • .then(console.log)
  • 可以使用在线使用程序Composer将已签名的交易传递到以太坊网络。这种做法被称为”离线签名“。离线签名对于诸如状态通道之类的应用程序特别有用,这些通道是跟踪两个帐户之间余额的智能合约,并且在提交已签名的交易后就可以转移资金。脱机签名也是去中心化交易所(DEXes)中的一种常见做法。

    也可以使用在线钱包通过以太坊账户创建签名验证和广播。

    使用Portis,您可以签署交易以与加油站网络(GSN)进行交互。


链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站 ”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。