区块交易的属性

参考:https://solidity.readthedocs.io/en/develop/units-and-global-variables.html#units-and-globally-available-variables

  • block.blockhash(uint blockNumber) returns (bytes32): 返回给定区块号的哈希值——仅适用于256个最新的块(不包括当前的块)——在版本0.4.22中被弃用,并被blockhash(uint blockNumber)取代。
  • block.coinbase (address):当前区块矿工的地址
  • block.difficulty (uint): 当前区块挖矿难度
  • block.gaslimit (uint): 当前区块的 gaslimit
  • block.number (uint): 当前区块的区块号。
  • block.timestamp (uint): 当前区块时间戳(自1970/1/1 00:00:00以来的秒数。)
  • gasleft() returns (uint256): 剩余的 gas
  • msg.data (bytes): 完整的调用数据(calldata)
  • msg.gas (uint):当前还剩的gas。在0.4.21版本后被gasleft()替代
  • msg.sender (address): 当前消息发起人的地址。
  • msg.sig (bytes4): 调用数据(calldata)的前四个字节(例如为:函数标识符)。
  • msg.value (uint): 消息所附带的以太币,单位为wei。
  • now (uint): 当前块的时间戳(block.timestamp的别名)
  • tx.gasprice (uint): 交易的gas的价格
  • tx.origin (address): sender of the transaction (full call chain)

注意:

(1) msg的所有成员的值,包括msg.sendermsg.value。值可以随着每次外部函数调用而改变。这包括对库函数的调用。

(2) 不要依赖block.timestamp, nowblockhash,将他们作为随机性的来源。
时间戳和区块哈希在某种程度上都可以受到挖掘程序的影响。挖矿社区中的不良行为者可以用一个选定的哈希运行赌场支付函数,如果他们没有收到任何钱,就重新尝试不同的哈希。

当前块的时间戳必须严格大于最后一个块的时间戳,但唯一的保证是它将位于规范链中两个连续块的时间戳之间的某个位置。

(3) 由于拓展性的原因,区块哈希不能用于所有块。您只能访问最近的256块的区块,所有其他值都为0。

好的,你的问题是如何使用 JavaScript构建区块链并满足以上要求,对吗?没问题,我会解答你的问题。 首先,要构建一个区块链,我们需要定义一个区块的数据结构。一个基本的区块包含以下属性: - index(区块的索引) - timestamp(区块的创建时间) - data(存储在区块中的数据) - previousHash(前一个区块的哈希) - hash(当前区块的哈希) 定义好区块的数据结构后,我们需要定义一个区块链类,并实现以下方法: - 构造函数:创建一个初始区块 - addBlock方法:添加一个新的区块区块链中 - getLastBlock方法:获取当前区块链中的最后一个区块 - isValid方法:验证当前区块链的有效性 接下来,我们需要为区块添加存储交易属性。我们可以为每个区块添加一个transactions属性,该属性用于存储当前区块中的所有交易。同时,我们需要添加一个addTransaction方法,用于向当前区块添加新的交易。 在添加交易之前,我们需要对交易进行验证。这包括验证交易的发送方、接收方和交易金额是否合法。如果交易验证通过,我们可以将该交易添加到当前区块的transactions数组中,并将符合要求的交易更新到当前区块的UTXOPool交易池中。 为了计算交易的哈希,我们需要添加一个combinedTransactionsHash方法。该方法用于将当前区块中的所有交易组合成一个字符串,并计算该字符串的哈希。在添加新的交易后,我们需要更新整个区块的哈希。 最后,我们需要实现一个UTXOPool类来管理所有未使用的交易输出。该类包含以下方法: - 构造函数:创建一个新的UTXOPool - addUTXO方法:将一个未使用的交易输出添加到UTXOPool中 - removeUTXO方法:从UTXOPool中删除一个未使用的交易输出 - getUTXO方法:获取UTXOPool中指定哈希的未使用的交易输出 通过实现上述方法,我们可以构建一个基本的区块链并满足所需的要求。当然,这只是一个简单的示例,真正的区块链实现会更加复杂和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值