当前位置: 首页 > 科技观察

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

时间:2023-03-15 14:32:40 科技观察

本文转载自微信公众号《区块链研究实验室》,作者连三丰。转载本文请联系区块链研究实验室公众号。由于所有数字资产都是通过交易创建的,因此签名在任何区块链中都起着至关重要的作用。在本文中,我们将向您展示如何签署以太坊交易,并探讨如何使用这些数字签署操纵数字资产等的操作。交易——旧交易、新交易区块链交易与银行交易没有区别?如今,大多数银行都可以轻松地使用数字方式向某人汇款、将钱存入您的储蓄账户,甚至提取货币贷款。互联网时代使我们能够在线执行大部分此类操作,而无需任何物理交互。尽管它们易于使用,但这些操作对银行来说远非简单且便宜。在幕后,多个第三方参与您的银行业务的清算、验证和验证,同时保持对银行法规的遵守。金融机构必须采取冗长的步骤来确保您确实是被授权操作您帐户的个人。所有这些层级都会产生大量成本,这也是Visa或万事达卡等支付网关通常根据交易金额对每次购买收取费用的众多原因之一。当然,这些操作可以随时随地冻结,也可以在特定情况下恢复。区块链交易的行为遵循一套不同的规则。由于公共区块链的分布式和无需许可的特性,任何人都可以签署交易并将其广播到网络。根据区块链的不同,您将收取费用以允许交易被“挖掘”(即由矿工提取并包含在区块链中),但该费用通常基于区块链中的用户需求,而不是基于价值交易中的资产。例如,从一个以太坊账户向另一个账户发送1的费用与发送100万的费用相同。矿工可以平等地接受这两种交易并将它们添加到有效块中以广播到区块链。此外,区块链交易不需要任何中央机构的验证。为了使交易有效,只需使用与其区块链对应的数字签名算法(DSA)使用私钥对其进行签名即可。以太坊和比特币区块链使用ECDSA算法,而Cardano或Polkadot等其他项目则依赖EdDSA算法。两者都依赖于椭圆曲线,而后者使用扭曲的爱德华兹曲线,这是对常见数字签名的改进。虽然任何私钥都可以用来签署交易,但只有当与用于签署交易的私钥关联的账户包含足够的资金时,转账交易才会成功执行。一旦交易被签署、广播到网络并在网络中被挖掘成一个成功的区块,就没有办法恢复交易。与银行业务不同,成功挖掘的区块链交易无法恢复或恢复到之前交易的状态。大多数公共区块链交易的性质使它们可见,因此,用于这些交易的区块链是这些资产的最终真相来源。以太坊交易结构既然我们对区块链交易的性质有了充分的了解,我们就可以创建我们的第一个基于以太坊的交易了。我们将从一个简单的转账交易开始:0.1ETH到地址。0x17A98d2b11Dfb784e63337d2170e21cf5DD04631可以使用JavaScriptObjectNotation(JSON)来描述交易,所以在创建交易时,使用MyEtherWallet(通过sendoffline登录后)如下:{"nonce":"0x00",//0indecimal"gasLimit":"0x5208“,//21000indecimal“gasprice”:“0x3B9ACA00”,//100000000000000000000000000000000000000000000000000000000000d2b11dfb784E633337D2170E21CF5DDDDDDDDDDDDDD00431/dodalect"chainId":1//Ethereumnetworkid}然后跳出几个值:nonce、gasLimit、gasPrice、data、chainId。这与我们交易的内容无关,而与我们的交易执行方式有关。这是因为在以太坊中发送交易时,你必须定义一些额外的参数来告诉矿工如何处理你的交易。我们交易中的两个属性涉及“gas”,这是一种计算工作量,必须支付给以太坊矿工才能将交易提交到区块链网络。一个是gasPrice(以Gwei为单位表示,等于1/10是以太坊的原生代币Ether),另一个是gasLimit,这是您在交易中允许使用的最大gas量。这些值可以从以太坊节点估算,因此通常由钱包提供商自动填写。除了gas参数之外,您还必须指定该交易将在哪个特定的以太坊网络上执行。以太坊网络包括chaidId为1的主网,但由于可以通过在线水龙头请求或资助测试网ETH,因此不会对可以向您提交交易的其他测试网产生任何经济价值的风险。通常,在开发Dapp时,您首先会在本地网络上运行它,然后将其部署到测试网,作为进入主网之前的最后一步。最后但同样重要的是,我们有数据和随机数,如果您需要提交一些其他数据,您可以将其作为交易的一部分附加。与智能合约交互时,数据字段将包含您对该合约的说明。随机数(“只使用一次的数字”)是以太坊网络用来跟踪交易的值,有助于避免网络中的双重支出和重放攻击。有时交易会因为gas价格过低而卡在网络中,因此广播交易价格较高,但在矿工接管后,相同的nonce有效地“替换”了网络中的待处理交易(一旦“慢”可以看到“”交易将拒绝,因为它与批准的交易具有相同的随机数)。签署以太坊交易获取我们之前的JSON,我们终于可以继续签署过程了。正如我们提到的,这个过程涉及ECDSA算法。要使用ECDSA签署交易,我们将使用流行的ethers.js库,它已经包装了对椭圆曲线包的必要调用,以便将secp256k1曲线与ECDSA算法一起使用。constethers=require(“ethers”)constsigner=newethers.wallet('0x007120583AF4601440144032F1F1F1F1F0C6CFDE5A58EE77702F5B7DB7D324244217171715DDDD695D695eSIMENT/nondrimnondrimnondrimnondrim.signer.signer.signransArtsArtsArtsArtsArtsArtsArtsArtsArtes(0x3B9ACA00“,//1000000000Indecimal”至“:”0x17A98D2B11DFB784E63337D2170E21CF5DD04631“,“值”,“值”:“0x16345785D8A.0000andvoluty”然后(控制台。日志);您可以在Runkit中在线测试此代码,并使用私钥将其与MyEtherWallet(MEW)的结果进行匹配。0x616E6769652E6A6A706572657A616775696E6167612E6574682E6C696E6B0D0A结果表示您已签名的交易,可以广播到以太坊网络。0xf86b80843b9aca008252089417a98d2b11dfb784e63337d2170e21cf5dd0463188016345785d8a00008025a02e47aa4c37e7003af4d3b7d20265691b6c03baba509c0556d21acaca82876cb4a01b5711b8c801584c7875370ed2e9b60260b390cdb63cf57fa6d77899102279a0您可以直接使用MEW或Alchemy的在线实用程序Composer,它允许您使用用于与以太坊节点通信eth_sendRawTransaction的RPCAPI方法将已签名的交易传递到以太坊网络。Signnow,turnlaterTransactionsigningperformedasdescribedaboveiscalled"offlinesigning".Sinceourprivatekeyisunderourcontrol,wecanusetheEthereumaccounttocreateasignatureverificationandlaterbroadcastittotheEthereumnetwork.Manyonlinewalletsdobothsigningandbroadcasting(e.g.Metamask,Portis).However,offlinesigningisparticularlyusefulforapplicationssuchasstatechannels,whicharesmartcontractsthattrackbalancesbetweentwoaccounts,andwherefundscanbetransferredassoonasasignedtransactionissubmitted.Off-chainsigningisalsoacommonpracticeindecentralizedexchanges(DEXes),wherebuyandsellordersarestoredoff-chainandonlysettledon-chainiftheymatchanorderthatfitsapreviouslysignedtransaction.WithPortis,youcansigntransactionstointeractwiththeGasStationNetwork(GSN).InordertointeractwiththeGSN,Portissubscribestoapoolofrelayersthatareabletopaythegasfeesforyourtransactions.Theserelayerssubscribetoadecentralizedcontract(suchasthisoneintheRopstentestnet),andPortissendsthemrequeststorelayyourtransaction.Youstillneedtosigntransactions(afterall,anunsignedsignatureismeaningless),butthePortiswidgetdoesallthepreviousprocessinginthebackground,souserscanstartsigningtransactionsandinteractingwithsmartcontractsevenwithabrandnewwallet.GasfeescanbepaidwithoutETH.