github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/test/contracts/auto/Creates.sol (about) 1 // SPDX-License-Identifier: GPL-3.0 2 3 pragma solidity >=0.7.0 <0.9.0; 4 5 contract Creates { 6 function opCreate(bytes memory bytecode, uint length) public returns(address) { 7 address addr; 8 assembly { 9 addr := create(0, 0xa0, length) 10 sstore(0x0, addr) 11 } 12 return addr; 13 } 14 15 function opCreate2(bytes memory bytecode, uint length) public returns(address) { 16 address addr; 17 assembly { 18 addr := create2(0, 0xa0, length, 0x2) 19 sstore(0x0, addr) 20 } 21 return addr; 22 } 23 24 function opCreate2Complex(bytes memory bytecode, uint length) public returns(address, uint256) { 25 uint256 number = add(1, 2); 26 27 address addr; 28 assembly { 29 addr := create2(0, add(bytecode, 0x20), length, 0x2) 30 sstore(0x0, addr) 31 } 32 33 number = add(2, 4); 34 35 return (addr, number); 36 } 37 38 function add(uint256 a, uint256 b) public pure returns(uint256) { 39 return a + b; 40 } 41 42 function sendValue() public payable { 43 uint bal; 44 assembly{ 45 bal := add(bal,callvalue()) 46 sstore(0x1, bal) 47 } 48 } 49 50 function opCreateValue(bytes memory bytecode, uint length) public payable returns(address) { 51 address addr; 52 assembly { 53 addr := create(500, 0xa0, length) 54 sstore(0x0, addr) 55 } 56 return addr; 57 } 58 59 function opCreate2Value(bytes memory bytecode, uint length) public payable returns(address) { 60 address addr; 61 assembly { 62 addr := create2(300, 0xa0, length, 0x55555) 63 sstore(0x0, addr) 64 } 65 return addr; 66 } 67 }