在 remix.ethereum.org,blockhash 函数总是将所有变量清零
At remix.ethereum.org, blockhash function always zeroes all variables
我在 remix.ethereum.org 的 blockhash 函数有问题。
尽管多次尝试使用不同的代码,blockhash 函数总是会导致问题,结果是所有变量都被 return 编辑为零值。
在下面的例子中,_previousBlockNumber 变量总是 return 归零。
如果 blockhash 函数行被注释掉,那么错误就不会发生,至少 _previousBlockNumber 变量 returns 是正确的。
我试过几个不同版本的编译器。
pragma solidity ^0.5.5;
contract Test {
constructor() public {
}
function rand() public view returns(uint,bytes32) {
uint _previousBlockNumber;
bytes32 _previousBlockHash;
_previousBlockNumber = uint(block.number - 1);
bytes32 _previousBlockHash = bytes32(blockhash(_previousBlockNumber));
return (_previousBlockNumber,_previousBlockHash);
}
}
这是一个错误问题?
感谢您的帮助。
我尝试 运行 此代码来解决问题,它对我进行了一些更改。您可以在 Rinkebey Testnet 上使用此地址 0x86ee6d633fd691e77dc79cbdb2a9fb108f79ecbd
.
找到相同的合约
pragma solidity ^0.5.5;
contract Test {
uint256 i;
constructor() public {
}
function rand() public view returns(uint,bytes32) {
uint _previousBlockNumber;
bytes32 _previousBlockHash;
_previousBlockNumber = uint(block.number - 1);
_previousBlockHash = bytes32(blockhash(_previousBlockNumber));
return (_previousBlockNumber,_previousBlockHash);
}
function setI(uint256 k) public{
i = k;
}
}
最初,您声明了 _previousBlockHash
两次,第二次是在 blockhash
函数的行上。我修好了,工作正常。
其次,在当前的合约代码中,你没有改变合约的任何状态,也没有进行任何交易,rand()
只是一个调用,不会添加任何其他块。所以它会一直保持 0
。我添加了一个用于测试的虚拟交易功能,现在可以正常工作了。
最后,尝试 运行 在实时测试网络上查看实际情况。
希望有用。
我在 remix.ethereum.org 的 blockhash 函数有问题。 尽管多次尝试使用不同的代码,blockhash 函数总是会导致问题,结果是所有变量都被 return 编辑为零值。
在下面的例子中,_previousBlockNumber 变量总是 return 归零。 如果 blockhash 函数行被注释掉,那么错误就不会发生,至少 _previousBlockNumber 变量 returns 是正确的。
我试过几个不同版本的编译器。
pragma solidity ^0.5.5;
contract Test {
constructor() public {
}
function rand() public view returns(uint,bytes32) {
uint _previousBlockNumber;
bytes32 _previousBlockHash;
_previousBlockNumber = uint(block.number - 1);
bytes32 _previousBlockHash = bytes32(blockhash(_previousBlockNumber));
return (_previousBlockNumber,_previousBlockHash);
}
}
这是一个错误问题?
感谢您的帮助。
我尝试 运行 此代码来解决问题,它对我进行了一些更改。您可以在 Rinkebey Testnet 上使用此地址 0x86ee6d633fd691e77dc79cbdb2a9fb108f79ecbd
.
pragma solidity ^0.5.5;
contract Test {
uint256 i;
constructor() public {
}
function rand() public view returns(uint,bytes32) {
uint _previousBlockNumber;
bytes32 _previousBlockHash;
_previousBlockNumber = uint(block.number - 1);
_previousBlockHash = bytes32(blockhash(_previousBlockNumber));
return (_previousBlockNumber,_previousBlockHash);
}
function setI(uint256 k) public{
i = k;
}
}
最初,您声明了 _previousBlockHash
两次,第二次是在 blockhash
函数的行上。我修好了,工作正常。
其次,在当前的合约代码中,你没有改变合约的任何状态,也没有进行任何交易,rand()
只是一个调用,不会添加任何其他块。所以它会一直保持 0
。我添加了一个用于测试的虚拟交易功能,现在可以正常工作了。
最后,尝试 运行 在实时测试网络上查看实际情况。 希望有用。