Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix nrgEstimate API issue when the contract check the sender address #533

Merged
merged 1 commit into from
Jul 3, 2018

Conversation

AionJayT
Copy link
Collaborator

@AionJayT AionJayT commented Jun 19, 2018

Notice

It is not allowed to submit your PR to the master branch directly, please submit your PR to the master-pre-merge branch.

Description

Please include a brief summary of the change that this pull request proposes. Include any relevant motivation and context. List any dependencies required for this change. Also relative with the check inside the VM repo aionnetwork/aion_fastvm#11

  • The nrgEstimate API doesn't put sender's account into the transaction contractor. it will cause the VM executing the local call get revert result if the contract checks the sender address

Type of change

Insert x into the following checkboxes to confirm (eg. [x]):

  • Bug fix.
  • New feature.
  • Enhancement.
  • Unit test.
  • Breaking change (a fix or feature that causes existing functionality to not work as expected).
  • Requires documentation update.

Testing

  • Tested by a web3 test case shown as follows.
 function release(address _toAddress, uint128 value)
    isLocked
    onlyRingMembers
    internal {
        _toAddress.transfer(value);
        Distributed(_toAddress, value);
    }
    /// Calculates a unique signature based on the position
    /// of each mint, this will uniquely identify a mint
    /// TODO: horrible way of encoding uniqueness
    function calcBundleHash(bytes32 blockHash, address[] addrs, uint128[] amts)
    constant
    returns (bytes32) {
        uint128 i = 0;
        bytes32 hash = keccak256(blockHash);
        for (; i < addrs.length; i++) {
            hash = keccak256(hash, addrs[i], amts[i]);
        }
        return hash;
    }
    /// Verify that uint128 cannot be overflowed, given we have a 
    /// total amount of: 465,000,000, this is represented as:
    /// 465 * 10 ^ 6 * 10 ^ 9 = 465 * 10 ^ 15
    /// 
    /// When we convert from 10 ^ 9 to 10 ^ 18, we get a total of:
    /// 4.65 * 10 ^ 26
    /// 
    /// This is still vastly smaller than 2^128 ~= 3.40 * 10^38
    ///
    /// TODO: this function is currently very expensive
    /// TODO: consider making this a precompiled, this is a good reason
    function releaseBatch(bytes32 blockHash, address[] addrs, uint128[] amts)
    isLocked
    onlyRingMembers
    external {
        require(addrs.length == amts.length);
        // calculate the bundleId
        bytes32 bundleHash = calcBundleHash(blockHash, addrs, amts);
        if (!voteAction(bundleHash, msg.sender)) {
            return;
        }
        if (bundleIdMap[bundleHash]) {
            return;
        }
        uint128 i = 0;
        for (i = 0; i < addrs.length; i++) {
            release(addrs[i], amts[i]);
        }
        bundleIdMap[bundleHash] = true;
        ProcessedBundle(blockHash, bundleHash);
    }
}

eth.estimateGas({to: '0xa0e1cca4fe786118c0abb1fdf45c04e44354f971b25c04ed77ac46f13cae179a', data: '0x1fec4cc6ea5695638b7f43ced52e6b6a7b164de3e835f02ce06362fdccebe1e9ee3ba7810000000000000000000000000000004000000000000000000000000000000a300000000000000000000000000000004fa024c0de415f77c9cfd10c1326ab9f219b34583fe283de9e0ba242ed99e04c6ca0dac528ffbf5f08f8a26c0639c39c38aa71f22fb1263326391b1a93e28230c6a02156f482ce77d0e1c1d579cc200b1fce58b977edb828242a4fa9a727e0b343a09ed08d3bf7f0ca92894b02889f3f94429ad396a0cd502f8d6286c9767171cca0de4af868ddb6c4c675a2e6b737301f33a83036a15947c0db292fa19324a8c3a0fcb90a422dbb2a78a14b63c02b5543469adc0b29393cb86845ecf5a3fef1e6a0775cba3eed764895d4faba81617e37dddc2386b073002626c8e17076432044a0a6f4844fca8a90bab29378f6438dbb5bac8f6604610eae5aeb2a7bc867fe95a0155a8c40e4fab882d8ee535a9ee3027dda1b6ca1c2ff9e84dc7c12f1155489a0c7a860217eb7e214d963c686e36f4c6bd79823a3691caaef9c98f80e23e952a086a8864e17b68e30ddbea33518bd9ba1fae9923fff0b468518cc3098dafc3ca035b7e69bcadbdc7c203933e17203c5595ac53ad2b8c22e6a80c9c2f24d93e2a097ae0deb1af26b8b866f01a6944f1734f6b81cc4807e2798ebde7c1f591dc2a0cd34961b8712aa4821108522110c4fef7176dce5bf5fcd8173851c637c0308a034b11776a997040e7ac5b1a52b78d952414f6776eb7dcb1062f90b70149ddca0e2b9447f671cc524a991f4ef600f4a13a67070e024f3e23f18e17c8d5cc2ada06f841d20557a7d7ec42c3f17ebbf7b7de462b94b4839335bb2ee93ce95a8d0a0f1a4a6282c62d7b7ffc334e21d3b7aafa69a06064018e354c3b45bc07ec499a093f824215a1e4fb0fc2721111a975993d9ac65c7e541720a2076ad787cf199a05a708ee3b8923ab59d9bcbfbed69b44ee3e908c415ef4147955fb03acd15bca0f7ab5315dd9bb83a79d27aa7a94707a61c280f37d938ba527ce6b9b1e261eca0a01788d7af78963ba0878fdb317155083d45414aee00e3c7d9043c8ff37ec2a026a2d7496c060c28fd72a438fa7ad90ec9d98e29980c329f3467849233fd30a03f693bfba7f82c9415c872937f498a58bc6d03b6558032999d65652283df15a0e4ed7720259eea19a6d6b8474c47c8788f71ce71abae209512d403af1d8193a070aa642748b0ccee915634b0a412c37eda615644fbe0f3a7b7a6234d623d80a0f2499b46663cbf08738d8e8847e5fc28bad3534518fee19a29817c08eba132a0b87a5c4efd7a489f4e8b4512d32f13736bd3fa56e6df9dbcf306690bf021e0a05adbd5d86a384f08f0ec943068fa169581bc68684c955353a7ed80d183db06a0fcbfe30e52ff5fa9d45ba3ca79e6b97955bc5eb77fc5f5d53b07ad295efe99a090aa2ede83db5544eae458721b69c5bac3525cac9c897aa1129238adca502aa0f402d4d54aa9a87fa5376e5c541d38f16bbeecf1852702a520a84e93a2ad29a09400edc63eb70e7c9dfe750a58f3ec58c2f31952509b28133dfb7babe4340ba0d66e901735e2f5a1af3fefddced37c8f6e9708a0c8aefb8fa052c0a83c54c9a05a7abc0313cefa2976e2dbff8c76a6eefb30cae78a9f1c6f220b743cdf16a7a0551ea28eaf4c2468b91f9d401a892e227b8c9a1126a7b1edc073489898532ea0ce2b08eb98b4f5d626c7e1a4465b0a22cbd10c55c48caf562c654fc6e0f923a08d628b4b9d18c8c3bf61201321d52ba235cd43001036b687dae9276846cc1da09e5f58b7360a60ebe888c20b265095188286c58562dae128ff690e636725d7a03d0a5ab2562b310527a898239cda307ca5d17a43bf83936b70496ee628ad25a060026494803a6d58735e514a7d1442eec8df5e66c049314d9fa55058db2c62a018618e16f7645f27666a530de7e6004de89380f244a360a43129f42445d0e2a0fb6ce0e62fb7f60f99096625ce95af4fa95175a6bf25cdeb2655f1bfe2f347a0782fed471d69b8cafac9fe91a775c46f301fd24f7d3746f94f0357a76a4df6a0b946bdbdb0f8494ee05c9bfb22de6b8cb62b0d2888107e437058c564cd4e5fa0cb4d6a8dd59cbe7d931a8fec3dca1f5b4a61bf01f559c7bcb2333914c6d72fa0c9b1abc251e50a3f1893c0dcc3be9fb34ad793dd2b65828ee51f61362b6185a08cafca6cd2b578bc5a2c379f6e840670779639828b7895d7abcc99ac223f1da07579cf54be9259e0aa96b7ae38d7e26bcb7ebee653fb4e36aaff070d92ed65a02279295db58df1c93d1da734c5e0faec5d6064498fe428922cf5441b51fa30a041a2d3aa39916559522ac205be63b7cbeb8ae13d1dbfd4f78aea9b3097a554a0176a33d6dba3a7b0f0f36d57334c07429f4c13d8286e349a8f011212645591a039a9a1df221078306abeacd9903603357e2f6a8f367a6d784033add0f194d9a0be99dab7afc48a609190941c5f163d8d4c828b26208f041b72cc9fe3bdcff5a030f39bdabf2b68dcbf91c09958f4bf768d8ae32fbf25be326fdea4453293e6a038f9d52eb8d3ec5f3519eeb0415ec5b9a4a89683546746a4bf6a15b2cf999ba05137310f84debbce8ab7c135420c5fd8431078482ce8dacde8ebeb39140130a0394b65627b2e33eb57b0a1c459ec3222e86bfab3ac45fae0c014be386093bfa0dee9731c97f97fb862160d6dfb6b17203637341ff4ddc0acc668fe0de16191a0a4aaec107d52def8cfa4d184513ef9bd65711e10c22d777656db2676733cd3a02f8ae83f43d29e0f307569dc50441232bbd1723facacf61ff5398065a0066aa0591112f6d89710f35b7a98546d39d4251b3c89ef242f15ed15270883a712d4a04d1cc6fa172c0dda405e26f83c515a882dbddd74bd76ca0e685d132feae629a0debe4f31a6e9b8868a790c7498d6a9c38c1156ccfac32235bd11045cb83387a02d6a2ea090d0930136b3176d3de34c1f86af74f456767d1ea987ea73eba463a0e1bd5514276aeaf07b59c37495ac34d4764ef849849e679db5af50b2409f0aa0f6c2b84beed19791a7941042fddbd984e8956899e741be9310c5d3ba148437a09bec174b83fc3349ce682ff929057204118deefd484c8782d054ccd0fc5a7ca072bf13d6f23f6f4c2676fec9d35700054689685658ffc9219ff70c66fd3494a020e7484c497450c7e3e70e435bf3527bfb1d595f5297882820353fa6fe4effa0bc325b7aa3e6e120e821ec9bb51c3522417a2f243438cd716148e8168db720a05adb791754ce1545275f651eccda6da3d747a750a2e66775c23fef029ffa25a08e277d4775ac614dcb5ed6332ea068a24eda806c4f44fff2ecc84b2f4cdb64a0c7dd16a64af61b5afbb2e35432f4af1b7d3c395a3866ff4fe64b9ba92f49dda01cbe139eeac342cc24360bc444ac59324db57e3ce3d07584c95cd49e6b4fc0a0e6677dd76a3b5c8e323543ddc346b0a7e6b2e6ebe65e34746b414bc75a40f1a0a97c9d6ab3bd93f69d50e40a6b0457cbcb43c22418970dc1caf2b29dee1e07a0a7fedf66c466d2fe65dab7168c687162156c5ed8bde5b3a35ce8c7dea75f14a05434834d34ef7d5181bada3cdbe81ec8ef09fb26b519e6c15a74cf2ad5ec2e0000000000000000000000000000004f000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400000000000000000000000002540be400'})

Verification

Insert x into the following checkboxes to confirm (eg. [x]):

  • I have self-reviewed my own code and conformed to the style guidelines of this project.
  • New and existing tests pass locally with my changes.
  • I have added tests for my fix or feature.
  • I have made appropriate changes to the corresponding documentation.
  • My code generates no new warnings.
  • Any dependent changes have been made.

@AionJayT AionJayT merged commit dcce1ff into master-pre-merge Jul 3, 2018
@AionJayT AionJayT deleted the estimateNrg branch July 19, 2018 16:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants