0

我试图在合同中保存用户的交易,例如:

function Donar() external payable{
    require(msg.value >= MINIMUM, "Minium amount is 0.05");
    bool nuevo = false;
    
    blockValue =  uint256(blockhash(block.number-1));//is a uint256
    //añadimos el nuevo mientro
    if(balances[msg.sender]<=0){
        users.push(msg.sender);
        nuevo = true;
    }
    balances[msg.sender] +=msg.value;
    emit Donation(msg.sender, balances[msg.sender], nuevo);
}

但是,当我从 Web3 js 尝试访问 Blockvalue 时,这给我带来了与交易不同的结果。

例如,如果我进行交易“Donar”,我会得到以下交易:0x5e99f8a0b2397a0d3e6024d42bc66ef7b0db776bdc3e5232ed8cb1dfccbcb28d

但是,如果我检查 Blockvalue,我会得到:45462209008309196972246523876171350366909309459187506831567695009831863640741

我从 JS 尝试加密到 sha256 但后来我得到了另一个不同的结果,例如 1c092b7a0d025a1754c4cf109668ff21a75e3b167f2a99f33747bf7b23b54b7f

如何在合约中保存交易哈希?

谢谢

4

1 回答 1

0

blockhash不一样sha256(blockNumber)

它是整个区块(包括交易和元数据)的哈希值,由获胜矿工发布,并用作下一个区块的输入之一。因此——区块链

最近区块之一的示例:https ://etherscan.io/block/13284032

  • 块号:13284032

    • 这个数字的SHA256:0x2ed065813c261f30844cfed7a49ad794b8517a71e9e108ae36b94514d6c978d6
  • 块哈希:0x778959bc43e97a43e525003cf54c07f4a333aceffdd763d9473ce158a2cf3a5a


使用 web3 获取块哈希很热(至少在 JS 中获得灵感;我看到你的问题被标记web3-java但我不知道 Java):

const Web3 = require('web3');
const web3 = new Web3('<provider URL>');
web3.eth.getBlock(13284032).then((block) => {
    console.log(block.hash);
});
于 2021-09-23T20:10:12.803 回答