我正在尝试从我的智能合约的一个函数中提取一个随机数,该函数使用“阻止难度”和“阻止时间戳”。
坚固性代码如下:
pragma solidity ^0.4.18;
contract ApprovalContract {
function random() external view returns (uint8){
return uint8(uint256(keccak256(abi.encodePacked(block.timestamp,
block.difficulty)))%251);
}
...
}
用JS编写的应用程序代码如下:
ApprovalContract.methods.random().call(
function(error, result) {
if (error) {
console.log('error: ' + error);
}
else {
console.log('result: ' + JSON.stringify(result));
}
});
我要做的就是将随机生成的数字记录到控制台。不幸的是,我一直看到“未捕获的TypeError:ApprovalContract.methods.random不是函数”
答案 0 :(得分:0)
您尚未发布整个JS代码,因此尚不清楚如何获得ApprovalContract。理想情况下应如下所示。您需要大于1.0的web3js版本才能运行此代码。我使用的版本是1.0.0-beta.34。
var approvalcontract_artifact = require('../build/contracts/ApprovalContract.json'); /*Please insert path of your ApprovalContract.json in here */
var Web3 = require('web3');
var web3 = new Web3('https://ropsten.infura.io/7dsXakGVRMs1EwuYwkQv'); /*Your Client Endpoint */
var ApprovalContract = new web3.eth.Contract(approvalcontract_artifact.abi, '0x3f6eeae6bb291ed249a4cbff22c49f0ce96b723a'); /* Please write your contract address in place of this address */
var random = ApprovalContract.methods.random().call()
.then(function(result){
console.log('result: ' + JSON.stringify(result));
})
.catch(function(error) {
console.log('error: ' + error);
});