Ошибка: случайный не является функцией солидности / web3js - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь получить случайное число, сгенерированное из функции моего умного контракта, которая использует «сложность блока» и «метку времени блока».

Код солидности выглядит следующим образом:

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

Все, что мне нужно сделать, это зарегистрировать случайным образомсгенерированный номер на консоль.К сожалению, я продолжаю видеть "Uncaught TypeError: ApprovalContract.methods.random не является функцией"

1 Ответ

0 голосов
/ 07 октября 2018

Вы не опубликовали весь свой код JS, поэтому неясно, как вы получаете ApprovalContract.В идеале это должно быть так, как показано ниже.Вам понадобится версия web3js больше 1.0, чтобы этот код работал.Я использовал версию 1.0.0-бета.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);
    });
...