【问题标题】:How get the "real" blockhash from Solidity to Web3如何获得从 Solidity 到 Web3 的“真实”块哈希
【发布时间】:2021-11-17 04:40:59
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: solidity web3 web3-java


    【解决方案1】:

    blockhashsha256(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);
    });
    

    【讨论】:

    • 但我想把它从坚固中拯救出来。我知道如何在操作之后从 WEB3 获取交易,但在同一个调用中,我想将其保存在合同中 >.>
    • 问题不在于web3。处于稳固状态。我想在发送时以相同的操作将交易保存在稳固的状态。为了避免使用 SQL 或其他东西在 web 中保存数据。如果我在solidity中使用:blockValue = bytes32 (blockhash(block.number-1));我有一个不同的结果,即真正的事务哈希。 >.
    • @DanielRayos 交易哈希与区块哈希不同。但它目前 (v0.8) 在 Solidity 中不可用。
    • OH 那么在 Solidity 中有什么方法可以获取交易吗? :S
    • @DanielRayos 您只能获取两个交易属性:gaspriceorigin。请参阅cheatsheet 了解更多信息。
    猜你喜欢
    • 2021-11-18
    • 2018-09-01
    • 2022-11-06
    • 2010-12-19
    • 1970-01-01
    • 2021-11-10
    • 2019-05-25
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多