我已经签订了一份智能合约来接收付款,然后付款到另外两个地址,将收到的总价值分别分为2股,分别为10%和90%。它应与付费墙一起在网站上使用。我前一阵子做了,它似乎起作用了(6个月前发布在mainnet上,用在此页面上:http://www.linebreakrecords.com/plaintext.php并不是一个严肃的商店,而只是我学习如何在网站上使用区块链)。但是,我使用的代码是基本的,现在已经过时了(当我在Remix中查看时,我现在收到有关不使用``发射前缀和'可能违反Checks-Effects-Interaction模式'和'Fallback函数'的警告)。 。需要太多气体(无限大)')。
首先,我希望获得有关如何使此代码更健壮/更安全并符合当前最佳实践的建议。其次,我希望就如何使合同仅接受高于一定价值(例如2美元)的交易并跟踪当前汇率提出建议,以便我将应支付的最低价值设置为2美元,并使其遵循汇率。不论市场如何变化,价格均保持在2美元)。我知道这是非常基本的东西,我在这里提供的代码可能是原始AF,我正在尝试学习,请尽可能帮助。非常感谢。
pragma solidity ^0.4.15;
contract CONTRACT1{
event senderLogger(address);
event valueLogger(uint);
address person1Adress;
address person2Adress;
function () payable {
senderLogger(msg.sender);
valueLogger(msg.value);
person1Adress = 0x705b4e2d44be431740b11fa9ba6ace47bef8d035;
person1Adress.transfer(msg.value / 10);
person2Adress = 0xC0BB3c8362628E152f70b602de4B7CFB41516618;
person2Adress.transfer((msg.value / 10) * 9);
}
}
答案 0 :(得分:0)
这不是一个糟糕的合同,但肯定可以使用一些改进。我在下面指出了一些问题,但总会有更多的问题。当您使用真钱工作时,智能合约工作需要对测试有偏执的心态,如果您一团糟,就没钱reverse the transaction(您的平价例子仍然是烧掉以太坊,很可能会保持这种状态) )。
希望这对您有所帮助,如果您需要其他帮助,请告诉我!如果我的答案符合您的要求,请不要忘记打勾,这样您的问题就算解决了。
emit
,并且在较早版本中允许使用,因此也可以添加它来阐明它不是随机函数调用。 / li>
12525
为125.25。在Solidity中将125.25除以10就是将每个数字向右移动并在前面添加0。125.25 / 10 = 12.52
和12.52 * 9 = 112.68' but
12.52 + 112.68 = 125.2 with .05 left in the contract untouched. Over time this may build up, but either way is burnt ether as you didn't include a function that calls the
selfdestruct()函数。125.25 - 12.52 = 112.73
,并且没有余数。