非法操作与处罚措施
非法操作
从智能合约编译的非法操作/无效操作代码不仅无法部署/执行,还会产生 fee_limit 的全额罚款。 用户通常将费用限制设置为1000VS(上限),所以这是一个力度很大的惩罚;如果用户尝试自动重试操作,则付出的代价会更高。
触发无效操作代码有两种常见形式:
用户手动尝试将任意无效的操作代码插入智能合约字节码。
用户在新操作代码被支持之前使用较新的编译器。 特别是之前的一个例子,在“VRC-10代币在智能合约中进行转账”getAllowVvmTransferVrc10,如果用户恰好在使用心得编译器来部署/执行智能合约,fee_limit 的全额罚款就会从用户账户中被扣除。
pragma solidity ^0.4.24;
contract transferTokenContract {
constructor() payable public{}
function() payable public{}
function transferTokenTest(address toAddress, uint256 tokenValue, vrcToken id) payable public {
require(id > 100000);
toAddress.transferToken(tokenValue, id);
}
function msgTokenValueAndTokenIdTest() public payable returns (vrcToken, uint256) {
vrcToken id = msg.tokenid;
uint256 value = msg.tokenvalue;
return (id, value);
}
function getTokenBalanceTest(address accountAddress) payable public returns (uint256) {
vrcToken id = 100001;
require(id > 100000);
return accountAddress.tokenBalance(id);
}
}
在上面的例子中, transferToken 映射到操作码 0xd0 , tokenBalance 映射到操作码 0xd1 , msg.tokenid 映射到操作码 0xd2 , msg.tokenvalue 映射到操作码 0xd3 。 如果在网络激活新的VRC-10转移提议之前用户使用了其中任何一项功能,VVM将拒绝此操作并惩罚整个 fee_limit 。
常规操作是是始终使用最新的VisionWeb / VisionBox 来 编译/部署/执行合约。 当用户在测试网和主网之间切换时,务必重新编译所有合同,以防不同网络参数定义了不同的有效操作代码集。
Updated about 3 years ago