我是个新来的人,我正在为我的项目写一份聪明的合同。我使用Win 10和Mist 0.8.8,测试网以"R“开头。
合同代码具有更改状态和修改的功能,但是在启动合同后,无法运行它的任何功能。将显示以下错误。非常感谢!


合同代码如下所示:非常感谢!
pragma solidity ^0.4.6;
contract FairTrade {
/* Variables */
address public creater;
address public trader;
address public framer;
address public preieumHandler;
/* State handling */
enum State { Paying, Transporting, Received, Completed }
State public state;
/* Contructor */
function FairTrade(address _trader, address _framer, address _preieumHandler,
uint _price, uint _quantity) {
creater = msg.sender;
trader = _trader;
framer = _framer;
preieumHandler = _preieumHandler;
}
/* Modifiers */
modifier onlyFramer {
if (msg.sender != framer) throw ; else _;
}
modifier onlyTrader {
if (msg.sender != trader) throw; else _;
}
modifier inState(State s) {
if (state != s) throw; else _;
}
modifier notInState(State s) {
if (state == s) throw; else _;
}
/* Functions */
function completedPaid() onlyTrader {
state = State.Transporting;
}
function receivedGood() inState(State.Transporting) onlyFramer {
state = State.Received;
}
function paid() inState(State.Received) {
state = State.Completed;
}
}发布于 2017-01-02 10:40:28
Testnet的名称是Ropsten。
从第一个映像中的原始数据0x295b4e17,您正在尝试执行paid()函数。
我检查了geth命令行中的每个函数签名,并匹配了以下签名:
> web3.sha3("paid()").substring(0, 10)
"0x295b4e17"这个paid()函数有修饰符inState(State.Received),这个修饰符会抛出一个错误,当前的state变量不是State.Received。
您正在显示的警告是因为Mist模拟了您试图执行的调用,并且确定调用paid()将失败,因为当前的state变量没有设置为State.Received。
要测试您的功能,您可以:
State.Received;或inState(State.Received)函数中删除paid()修饰符。我建议首先尝试2.以上,这样您就可以确定是否可以成功地执行paid()函数。一旦您确认没有修饰符的paid()函数成功执行,则创建其他require函数,以便当带修饰符的paid()工作时,将您的契约state移动到State.Received。
下面的评论
问:我应该使用uint作为记录ehter发送的变量类型吗?
答:uint (即uint256)适合记录醚的数量。
问:当我把1以太送去合同时,它显示的是1000000000瓦特。
1乙醚是1 e18或1,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000。在geth中:
> 1e18
1000000000000000000
> web3.fromWei(1e18,"ether")
"1"
> web3.toWei(1,"ether")
"1000000000000000000"问:最后,我想学习cml来运行合同。你有推荐给我的链接吗?
答:如果cml引用命令行,即使用geth命令行,则在以下位置有一些逐步指南:
您还可能希望查看浏览器的可靠性--参见如何从合同调用库函数?=> [错误]合同代码无法存储,请检查您的气量。未定义中的一个示例。
https://ethereum.stackexchange.com/questions/11050
复制相似问题