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  }