非法操作与处罚措施

非法操作

从智能合约编译的非法操作/无效操作代码不仅无法部署/执行,还会产生 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 来 编译/部署/执行合约。 当用户在测试网和主网之间切换时,务必重新编译所有合同,以防不同网络参数定义了不同的有效操作代码集。