建议和反馈

请填写你的反馈内容

这个图怎么保证第九步发生在第七步后面呢?

QQ图片20181207100123.png

稻盛

2018-12-07

861

0

撰写答案

请先登陆或注册

1个回答

TEJ

2018-12-09

你的标签是以太坊和eos,没玩过eos,说下以太坊 solidity 中我会怎样做。

- 以太坊中,如果对两个操作的执行顺序有要求,,首先考虑该操作前后是否对某个数据产生状态变更,

如果有,则用该数据的状态进行判断:

...
uint public a;

// @dev 修饰器 checkA, 限制使用改修饰器的条件是a > 999
modifier checkA() {
    require(a > 999);
    _;
}

function add() public {
    a += 1;
}

// @dev add() 将a逐次加一
//    checkA() 修饰reset(),使得只有当 a > 999 时才可将其重置为零。
function reset() public checkA {
    a = 0;
}

...


- 如果不存在这种便于判断的数据特征变化,可以主动设置一个:

...
address public player;
bool public status;

modifier checkStatus() {
    require(status == true);
    _;
}

function optA() public payable {
    player = msg.sender;
    status = true;
}

function optB() public payable checkStatus {
    player = msg.sender;
    status = false;
}

// optA 和 optB 都将player变更为其函数调用者的地址,因此可以在optA中将status置真,
// optB 需要在optA后执行,则必须在status == true时方可进行,且在执行后再次将status置假。
// 这样便可在一个周期中确保optA和optB按照某种顺序执行。
// 当然还有很多方法来确保两个操作按顺序执行,但大致就是分这两类。

...

在solidity中我是这样解决的,欢迎各位批评指正。

0
赞赏(0)
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励