Ethereum Solidity/Truffle-无法在Truffle控制台内调用函数(但我可以在混音中调用)
我正在做一个关于坚固性的“打赌Dapp”合同。我有一个名为Ethereum Solidity/Truffle-无法在Truffle控制台内调用函数(但我可以在混音中调用),ethereum,solidity,smartcontracts,truffle,ganache,Ethereum,Solidity,Smartcontracts,Truffle,Ganache,我正在做一个关于坚固性的“打赌Dapp”合同。我有一个名为addContractFunds的函数,它允许我将以太坊发送到合同余额。但是,当我在Ropsten测试网络上的truffle控制台中调用此函数时,我得到以下错误: TypeError:无法读取未定义的属性“address” 内部块菌控制台: 有趣的是,当我运行这个契约并在Remix(在ropsten上)或本地使用ganache进行测试时,一切都很好。有人知道发生了什么吗 这是我合同的密码 import "./provableA
addContractFunds
的函数,它允许我将以太坊发送到合同余额。但是,当我在Ropsten测试网络上的truffle控制台中调用此函数时,我得到以下错误:
TypeError:无法读取未定义的属性“address”
内部块菌控制台:
有趣的是,当我运行这个契约并在Remix(在ropsten上)或本地使用ganache进行测试时,一切都很好。有人知道发生了什么吗
这是我合同的密码
import "./provableAPI.sol";
import "./Ownable.sol";
contract Coinflip is usingProvable, Ownable {
struct CoinflipSession {
uint betAmount;
}
uint public balance;
uint256 constant NUM_RANDOM_BYTES_REQUESTED = 1;
uint256 public latestNumber;
event LogNewProvableQuery(string description);
event generateRandomNumber(uint256 randomNumber);
event betTaken(uint betAmount);
event winPayout(uint betAmount);
constructor() public {
update();
}
mapping (address => CoinflipSession) private session;
modifier costs(uint cost){
require(msg.value >= cost);
_;
}
function __callback(bytes32 queryId, string memory _result, bytes memory _proof) public {
require(msg.sender == provable_cbAddress());
uint256 randomNumber = uint256(keccak256(abi.encodePacked(_result))) % 2;
latestNumber = randomNumber;
emit generateRandomNumber(randomNumber);
}
function update() payable public {
uint256 QUERY_EXECUTION_DELAY = 0;
uint256 GAS_FOR_CALLBACK = 200000;
provable_newRandomDSQuery(
QUERY_EXECUTION_DELAY,
NUM_RANDOM_BYTES_REQUESTED,
GAS_FOR_CALLBACK
);
}
function addContractFunds() public payable{
balance += msg.value;
}
function intakeToken() public payable costs(1 wei){
//require(session[msg.sender] == null || session[msg.sender].betAmount == 0);
balance += msg.value;
CoinflipSession memory newSession;
newSession.betAmount = msg.value;
address creator = msg.sender;
session[creator] = newSession;
emit betTaken(newSession.betAmount);
}
function flipCoin() public returns(uint) {
if (random() == 0) {
return 0;
}
resetBalance();
return 1;
}
function resetBalance() private {
session[msg.sender].betAmount = 0;
}
function handleWinPayout() public payable {
balance -= session[msg.sender].betAmount *2;
uint toTransfer = session[msg.sender].betAmount*2;
msg.sender.transfer(toTransfer);
emit winPayout(session[msg.sender].betAmount * 2);
resetBalance();
}
function random() public view returns (uint) {
return now % 2;
}
}
你能在初始化之后在truffle控制台中调用你的实例,看看它不是未定义的吗?问题已经解决了。结果我不得不将我的节点版本降级到11.12.0。以前使用的是12.8。不知道为什么,但更新版本的node似乎在使用truffleCan时出错。在初始化之后,您可以在truffle控制台中调用您的实例,以查看它是否未定义?问题已经解决。结果我不得不将我的节点版本降级到11.12.0。以前使用的是12.8。不知道为什么,但较新版本的node似乎用truffle解决了问题