主页 > imtoken钱包app官方下载 > 探索以太坊交易

探索以太坊交易

imtoken钱包app官方下载 2024-01-13 05:12:56

以太坊币交易官方网站_为什么以太坊比比特币交易快_以太坊交易教程

以太坊可以看作是一个基于交易的状态机:交易可以改变状态机,状态机可以记录和跟踪交易。 本文将更深入地研究以太坊交易的组成部分,解释最容易混淆的十六进制数是如何确定的。

以太坊币交易官方网站_为什么以太坊比比特币交易快_以太坊交易教程

在本教程中,我们使用的是 node.js,因此我们将首先安装依赖项。 节点

$ npm install web3@0.19 ethereumjs-util@4.4 ethereumjs-tx@1.3
复制代码

然后创建文件 tx.js 并请求依赖项。 混帐

var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider('https://ropsten.infura.io/'));
var util = require('ethereumjs-util');
var tx = require('ethereumjs-tx');
复制代码

首先,让我们从了解私钥开始。 以太坊通过公钥密码术授权。 具体采用椭圆曲线数字加密算法,通过secp256k1标准生成公钥。 有一些限制以太坊交易教程,私钥只是一个随机的 256 位数字。 例如:github

var privateKey = '0xc0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0de';
复制代码

通过私钥导出对应的公钥:web

以太坊币交易官方网站_以太坊交易教程_为什么以太坊比比特币交易快

var publicKey = util.bufferToHex(util.privateToPublic(privateKey));
复制代码

如果输出公钥,可以看到如下十六进制数: Algorithm

0x4643bb6b393ac20a6175c713175734a72517c63d6f73a3ca90a15356f2e967da03d16431441c61ac69aeabb7937d333829d9da50431ff6af38536aa262497b27
复制代码

与私钥关联的以太坊地址是相应公钥的 SHA3-256 (Keccak) 散列的最后 160 位。 npm

var address = '0x' + util.bufferToHex(util.sha3(publicKey)).slice(26);
//0x53ae893e4b22d707943299a8d0c844df0e3d5557
复制代码

2

如您所见,多个私钥可以具有相同的地址。 一个以太坊账户与一个地址相关联,每个地址都有以下属性: api

接下来,让我们看一下交易,它有 6 个输入字段:

发送 1000wei 以太币并留下消息 0Xc0de 的交易可以构造如下:

var rawTx = {
    nonce: web3.toHex(0),

以太坊币交易官方网站_为什么以太坊比比特币交易快_以太坊交易教程

gasPrice: web3.toHex(20000000000), gasLimit: web3.toHex(100000), to: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85', value: web3.toHex(1000), data: '0xc0de' }; 复制代码

注意这里没有指定from地址,是私钥签名后从签名中提取出来的。 签署交易:

var p = new Buffer('c0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0de', 'hex');
var transaction = new tx(rawTx);
transaction.sign(p);
复制代码

以太坊币交易官方网站_为什么以太坊比比特币交易快_以太坊交易教程

然后可以将交易发送到网络并使用 256 位交易 ID 进行跟踪。 可以在Etherscan中查看这笔交易。交易ID是交易的哈希

console.log(util.bufferToHex(transaction.hash(true)));

以太坊交易教程_以太坊币交易官方网站_为什么以太坊比比特币交易快

//0x8b69a0ca303305a92d8d028704d65e4942b7ccc9a99917c8c9e940c9d57a9662 复制代码

以太坊币交易官方网站_为什么以太坊比比特币交易快_以太坊交易教程

接下来,让我们看看什么构成了函数调用的数据。 以此合约交易数据为例:

console.log(web3.eth.getTransaction('0xaf4a217f6cc6f8c79530203372f3fbec160da83d1abe048625a390ba1705dd57').input);
//0xa9059cbb0000000000000000000000007adee867ea91533879d083dd47ea81f0eee3a37e000000000000000000000000000000000000000000000000d02ab486cedbffff
复制代码

为了知道调用了哪个函数,需要提前知道合约的所有函数来创建哈希表。 前 32 位 a9059cbb 是函数散列的前 32 位。 在当前情况下,函数是 transfer(address _to, uint256 _value) 并且它的散列是:

console.log(web3.sha3('transfer(address,uint256)'));
//0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b
复制代码

接下来是参数,每个256位以太坊交易教程,所以当前情况下的地址是:

0x0000000000000000000000007adee867ea91533879d083dd47ea81f0eee3a37e
复制代码

uint256 是:

为什么以太坊比比特币交易快_以太坊交易教程_以太坊币交易官方网站

0x000000000000000000000000000000000000000000000000d02ab486cedbffff
复制代码

以太坊币交易官方网站_为什么以太坊比比特币交易快_以太坊交易教程

接下来,如上所述,通过省略to字段,可以创建合同。 但是如何确定合约地址呢? 以此交易为例:

console.log(web3.eth.getTransactionReceipt('0x77a4f46ff7bf8c084c34293fd654c60e107df42c5bcd2666f75c0b47a9352be5').contractAddress);
//0x950041c1599529a9f64cf2be59ffb86072f00111
复制代码

合约地址是发送方地址的哈希值的后160位,可以预先确定nonce。 对于此交易,可以在以下代码中找到发送方和随机数:

var contractTx = web3.eth.getTransaction('0x77a4f46ff7bf8c084c34293fd654c60e107df42c5bcd2666f75c0b47a9352be5');
console.log(contractTx.from);
//0x84f9d8b0e74a7060e20b025c1ea63c2b171bae6f
console.log(contractTx.nonce);
//0
复制代码

所以合约地址为:

为什么以太坊比比特币交易快_以太坊币交易官方网站_以太坊交易教程

console.log('0x' + util.bufferToHex(util.rlphash(['0x84f9d8b0e74a7060e20b025c1ea63c2b171bae6f', 0])).slice(26));
//0x950041c1599529a9f64cf2be59ffb86072f00111
复制代码

以太坊币交易官方网站_为什么以太坊比比特币交易快_以太坊交易教程

现在我们已经弄清楚了这些十六进制数的含义了!

以太坊和智能合约具有颠覆许多行业的巨大潜力。 网上有很多资源,你可以在下面找到更多关于以太坊的教程!

以太坊主站

Mist 的 GitHub Repo,以太坊的客户之一 github.com/ethereum/mi...

坚固性 solidity.readthedocs.io/en/latest/

Web3 API

社区讨论

如果您对本文有任何疑问,可以在我们的 GitHub nightlyHacks 存储库中提问。

原文链接:medium.com/@codetracti…

添加一名作者

翻译校对:刘亚男、阿健

资料来源:以太坊粉丝 (ethfa​​ns.org/posts/insid…)