UNPKG

@solvprotocol/upgrade-safe-transpiler

Version:

Solidity preprocessor used to generate OpenZeppelin Contracts Upgrade Safe.

752 lines (698 loc) 19.3 kB
# Snapshot report for `src/transform.test.ts` The actual snapshot is saved in `transform.test.ts.snap`. Generated by [AVA](https://avajs.dev). ## remove functions > Snapshot 1 `pragma solidity ^0.6;␊ ␊ contract RemoveFunctions {␊ ␊ ␊ }␊ ` ## rename identifiers > Snapshot 1 `pragma solidity ^0.6.0;␊ ␊ library RenameLibrary {␊ function test() external {␊ }␊ }␊ ␊ contract RenameContract {␊ }␊ ␊ contract RenameDeployer {␊ RenameContractUpgradeable rc = RenameContractUpgradeable(0);␊ ␊ constructor() public {␊ new RenameContractUpgradeable();␊ }␊ ␊ function deploy() external returns (RenameContractUpgradeable) {␊ return new RenameContractUpgradeable();␊ }␊ ␊ function test() external {␊ RenameLibraryUpgradeable.test();␊ }␊ }␊ ` ## prepend Initializable base > Snapshot 1 `pragma solidity ^0.6.0;␊ ␊ library RenameLibrary {␊ function test() external {␊ }␊ }␊ ␊ contract RenameContract is Initializable {␊ }␊ ␊ contract RenameDeployer is Initializable {␊ RenameContract rc = RenameContract(0);␊ ␊ constructor() public {␊ new RenameContract();␊ }␊ ␊ function deploy() external returns (RenameContract) {␊ return new RenameContract();␊ }␊ ␊ function test() external {␊ RenameLibrary.test();␊ }␊ }␊ ` ## purge var inits > Snapshot 1 `pragma solidity ^0.6.0;␊ ␊ contract ElementaryTypes {␊ address public owner;␊ bool active;␊ string hello;␊ int count;␊ uint ucount;␊ bytes32 samevar;␊ uint x;␊ uint y;␊ }␊ ` ## remove inheritance args > Snapshot 1 `pragma solidity ^0.6;␊ ␊ contract A {␊ constructor(uint) public {}␊ }␊ ␊ contract B is A {␊ ␊ modifier hasModifier (){␊ _;␊ }␊ ␊ modifier hasModifierArgument(uint b) {␊ _;␊ }␊ ␊ constructor (uint b) public hasModifier hasModifierArgument(b) {}␊ }␊ ` ## transform contract name > Snapshot 1 `pragma solidity ^0.6.0;␊ ␊ library RenameLibraryUpgradeable {␊ function test() external {␊ }␊ }␊ ␊ contract RenameContractUpgradeable {␊ }␊ ␊ contract RenameDeployerUpgradeable {␊ RenameContract rc = RenameContract(0);␊ ␊ constructor() public {␊ new RenameContract();␊ }␊ ␊ function deploy() external returns (RenameContract) {␊ return new RenameContract();␊ }␊ ␊ function test() external {␊ RenameLibrary.test();␊ }␊ }␊ ` ## skip contract rename when Upgradeable suffix > Snapshot 1 `pragma solidity ^0.6.0;␊ ␊ contract AlreadyUpgradeable {␊ }␊ ` ## fix import directives > Snapshot 1 `pragma solidity ^0.6.0;␊ ␊ import "./ImportedUpgradeable.sol";␊ ␊ contract Local is Imported2 {␊ constructor(uint x, uint y) Imported2(x, y) public { }␊ }␊ ` ## fix import directives complex > Snapshot 1 `pragma solidity ^0.6.0;␊ ␊ import { Imp1Upgradeable } from "./TransformImport2-ImportedUpgradeable.sol";␊ import { Imp2Upgradeable as ImpX } from "./TransformImport2-ImportedUpgradeable.sol";␊ ␊ contract Foo {␊ using Imp1Upgradeable for Imp1Upgradeable.S;␊ using ImpX for ImpX.S;␊ }␊ ` ## append initializable import > Snapshot 1 `pragma solidity ^0.6.0;␊ ␊ import './Imported.sol';␊ import "./Initializable.sol";␊ ␊ contract Local is Imported2 {␊ constructor(uint x, uint y) Imported2(x, y) public { }␊ }␊ ` ## append initializable import custom > Snapshot 1 `pragma solidity ^0.6.0;␊ ␊ import './Imported.sol';␊ import "./Initializable2.sol";␊ ␊ contract Local is Imported2 {␊ constructor(uint x, uint y) Imported2(x, y) public { }␊ }␊ ` ## transform constructor > Snapshot 1 `pragma solidity ^0.6;␊ ␊ contract Foo1 {␊ function __Foo1_init() internal onlyInitializing {␊ }␊ ␊ function __Foo1_init_unchained() internal onlyInitializing {␊ }␊ }␊ ␊ contract Foo2 {␊ event Ev();␊ function __Foo2_init() internal onlyInitializing {␊ __Foo2_init_unchained();␊ }␊ ␊ function __Foo2_init_unchained() internal onlyInitializing {␊ emit Ev();␊ }␊ }␊ ␊ contract Foo3 {␊ function __Foo3_init() internal onlyInitializing {␊ __Foo3_init_unchained();␊ }␊ ␊ function __Foo3_init_unchained() internal onlyInitializing {␊ x = 1;␊ }␊ uint x = 1;␊ }␊ ␊ contract Foo4 {␊ uint x = 1;␊ event Ev();␊ function __Foo4_init() internal onlyInitializing {␊ __Foo4_init_unchained();␊ }␊ ␊ function __Foo4_init_unchained() internal onlyInitializing {␊ x = 1;␊ emit Ev();␊ }␊ }␊ ␊ contract Bar1 {␊ function __Bar1_init() internal onlyInitializing {␊ }␊ ␊ function __Bar1_init_unchained() internal onlyInitializing {␊ }␊ ␊ }␊ ␊ contract Bar2 is Bar1 {␊ function __Bar2_init() internal onlyInitializing {␊ }␊ ␊ function __Bar2_init_unchained() internal onlyInitializing {␊ }␊ ␊ }␊ ␊ contract Bar3 is Bar2 {␊ function __Bar3_init() internal onlyInitializing {␊ }␊ ␊ function __Bar3_init_unchained() internal onlyInitializing {␊ }␊ ␊ }␊ ␊ contract Foo5 {␊ function __Foo5_init(function () external f) internal onlyInitializing {␊ __Foo5_init_unchained(f);␊ }␊ ␊ function __Foo5_init_unchained(function () external f) internal onlyInitializing {␊ f();␊ }␊ }␊ ␊ contract Foo6 {␊ function __Foo6_init(␊ uint a,␊ uint b␊ ) internal onlyInitializing {␊ __Foo6_init_unchained(a, b);␊ }␊ ␊ function __Foo6_init_unchained(␊ uint a,␊ uint b␊ ) internal onlyInitializing {␊ a = a + b;␊ }␊ }␊ ␊ contract Foo7 {␊ uint a;␊ function __Foo7_init(␊ uint _a␊ ) internal onlyInitializing {␊ __Foo7_init_unchained(_a);␊ }␊ ␊ function __Foo7_init_unchained(␊ uint _a␊ ) internal onlyInitializing {␊ a = _a;␊ }␊ }␊ ␊ contract Foo8 {␊ ␊ modifier hasModifier() {␊ _;␊ }␊ ␊ function __Foo8_init() internal onlyInitializing {␊ __Foo8_init_unchained();␊ }␊ ␊ function __Foo8_init_unchained() internal onlyInitializing hasModifier {␊ }␊ }␊ ␊ contract Foo9 {␊ function __Foo9_init(␊ uint a,␊ uint b␊ ) internal onlyInitializing {␊ __Foo9_init_unchained(a, b);␊ }␊ ␊ function __Foo9_init_unchained(␊ uint a,␊ uint b␊ ) internal onlyInitializing {␊ a = 0;␊ b = 0;␊ }␊ }␊ ␊ contract Foo10 is Foo7(123) {␊ function __Foo10_init() internal onlyInitializing {␊ __Foo7_init_unchained(123);␊ __Foo10_init_unchained();␊ }␊ ␊ function __Foo10_init_unchained() internal onlyInitializing {␊ bar = 1;␊ }␊ ␊ uint bar = 1;␊ }␊ ␊ contract Foo11 is Foo7 {␊ ␊ modifier hasModifier() {␊ _;␊ }␊ ␊ function __Foo11_init(uint a) internal onlyInitializing {␊ __Foo7_init_unchained(a);␊ __Foo11_init_unchained(a);␊ }␊ ␊ function __Foo11_init_unchained(uint) internal onlyInitializing hasModifier {␊ }␊ }␊ ␊ contract Foo12 is Foo7 {␊ ␊ function __Foo12_init(uint a) internal onlyInitializing {␊ __Foo7_init_unchained(a);␊ }␊ ␊ function __Foo12_init_unchained(uint) internal onlyInitializing {␊ }␊ }␊ ␊ contract Foo13 is Foo4 {␊ function __Foo13_init() internal onlyInitializing {␊ __Foo4_init_unchained();␊ }␊ ␊ function __Foo13_init_unchained() internal onlyInitializing { }␊ }␊ ␊ contract Foo14 is Foo7 {␊ ␊ modifier hasModifier(uint b) {␊ _;␊ }␊ ␊ function __Foo14_init(uint a, uint b) internal onlyInitializing {␊ __Foo7_init_unchained(a);␊ __Foo14_init_unchained(a, b);␊ }␊ ␊ function __Foo14_init_unchained(uint, uint b) internal onlyInitializing hasModifier(b) {␊ }␊ }␊ ␊ contract Foo15 is Foo7 {␊ uint x;␊ function __Foo15_init(uint _x) internal onlyInitializing {␊ __Foo7_init_unchained(_x);␊ __Foo15_init_unchained(_x);␊ }␊ ␊ function __Foo15_init_unchained(uint _x) internal onlyInitializing {␊ x = _x;␊ }␊ }␊ ␊ abstract contract Foo16 is Foo15 {␊ function __Foo16_init() internal onlyInitializing {␊ }␊ ␊ function __Foo16_init_unchained() internal onlyInitializing {␊ }␊ ␊ }␊ ␊ contract Foo17 is Foo4 {␊ function __Foo17_init() internal onlyInitializing {␊ __Foo4_init_unchained();␊ }␊ ␊ function __Foo17_init_unchained() internal onlyInitializing {}␊ }␊ ␊ abstract contract Foo18 is Foo17 {␊ function __Foo18_init() internal onlyInitializing {␊ __Foo4_init_unchained();␊ }␊ ␊ function __Foo18_init_unchained() internal onlyInitializing {␊ }␊ ␊ }␊ ␊ contract Foo19 {␊ function __Foo19_init(uint x) internal onlyInitializing {␊ }␊ ␊ function __Foo19_init_unchained(uint) internal onlyInitializing {}␊ }␊ ␊ contract Foo20 is Foo19 {␊ function __Foo20_init(uint x) internal onlyInitializing {␊ __Foo19_init_unchained(x);␊ }␊ ␊ function __Foo20_init_unchained(uint) internal onlyInitializing {}␊ }␊ ␊ contract Foo21 is Foo20 {␊ function __Foo21_init() internal onlyInitializing {␊ __Foo19_init_unchained(4);␊ __Foo20_init_unchained(4);␊ }␊ ␊ function __Foo21_init_unchained() internal onlyInitializing {}␊ }␊ ␊ contract Foo22 is Foo19 {␊ function __Foo22_init(uint y) internal onlyInitializing {␊ __Foo19_init_unchained(y + 1);␊ }␊ ␊ function __Foo22_init_unchained(uint) internal onlyInitializing {}␊ }␊ ␊ contract Foo23 is Foo9, Foo20 {␊ function __Foo23_init(uint x, uint y) internal onlyInitializing {␊ __Foo9_init_unchained(x, y);␊ __Foo19_init_unchained(y);␊ __Foo20_init_unchained(y);␊ }␊ ␊ function __Foo23_init_unchained(uint, uint) internal onlyInitializing {}␊ }␊ ␊ contract Foo24 is Foo23 {␊ function __Foo24_init() internal onlyInitializing {␊ __Foo9_init_unchained(1, 2);␊ __Foo19_init_unchained(2);␊ __Foo20_init_unchained(2);␊ __Foo23_init_unchained(1, 2);␊ }␊ ␊ function __Foo24_init_unchained() internal onlyInitializing {}␊ }␊ ␊ contract Foo25 is Foo19 {␊ function __Foo25_init() internal onlyInitializing {␊ __Foo19_init_unchained(1+2);␊ }␊ ␊ function __Foo25_init_unchained() internal onlyInitializing {}␊ }␊ ␊ interface IFoo {␊ function mint() external returns (uint);␊ }␊ ␊ contract Foo26 is Foo19 {␊ function __Foo26_init(IFoo t) internal onlyInitializing {␊ __Foo19_init_unchained(t.mint());␊ }␊ ␊ function __Foo26_init_unchained(IFoo) internal onlyInitializing {}␊ }␊ ␊ contract Foo27 is Foo26 {␊ function __Foo27_init(IFoo t) internal onlyInitializing {␊ __Foo19_init_unchained(t.mint());␊ __Foo26_init_unchained(t);␊ }␊ ␊ function __Foo27_init_unchained(IFoo) internal onlyInitializing {}␊ }␊ ␊ contract Foo28 {␊ function __Foo28_init(uint x) internal onlyInitializing {␊ }␊ ␊ function __Foo28_init_unchained(uint) internal onlyInitializing {}␊ }␊ ␊ abstract contract Foo29 is Foo28 {␊ function __Foo29_init(uint y) internal onlyInitializing {␊ }␊ ␊ function __Foo29_init_unchained(uint) internal onlyInitializing {}␊ }␊ ␊ abstract contract Foo30 is Foo28, Foo29 {␊ function __Foo30_init(uint z) internal onlyInitializing {␊ __Foo28_init_unchained(z);␊ }␊ ␊ function __Foo30_init_unchained(uint) internal onlyInitializing {}␊ }␊ ␊ abstract contract Foo31 is Foo19 {␊ function __Foo31_init(uint b) internal onlyInitializing {␊ }␊ ␊ function __Foo31_init_unchained(uint) internal onlyInitializing {}␊ }␊ ␊ abstract contract Foo32 is Foo20, Foo31 {␊ function __Foo32_init(uint b) internal onlyInitializing {␊ __Foo19_init_unchained(b);␊ __Foo20_init_unchained(b);␊ }␊ ␊ function __Foo32_init_unchained(uint) internal onlyInitializing {}␊ }` ## fix new statement > Snapshot 1 `pragma solidity ^0.6;␊ ␊ contract Foo {␊ function initialize(uint x) public virtual initializer {␊ __Foo_init(x);␊ }␊ constructor(uint x) public {}␊ }␊ ␊ contract Bar {␊ function initialize() public virtual initializer {␊ __Bar_init();␊ }␊ }␊ ␊ contract TransformNew {␊ function test1() external {␊ Foo foo;␊ foo = new Foo();␊ foo.initialize(1);␊ }␊ ␊ function test2() external {␊ Bar bar;␊ bar = new Bar();␊ bar.initialize();␊ }␊ ␊ function test3() external {␊ address bar;␊ bar = address(new Bar());␊ Bar(bar).initialize();␊ }␊ }␊ ` ## fix new statement in var init > Snapshot 1 `pragma solidity ^0.6;␊ ␊ contract Foo {␊ function initialize(uint x) public virtual initializer {␊ __Foo_init(x);␊ }␊ function __Foo_init(uint x) internal onlyInitializing {␊ }␊ ␊ function __Foo_init_unchained(uint) internal onlyInitializing {}␊ }␊ ␊ contract Bar {␊ function __Bar_init() internal onlyInitializing {␊ }␊ ␊ function __Bar_init_unchained() internal onlyInitializing {␊ }␊ function initialize() public virtual initializer {␊ __Bar_init();␊ }␊ }␊ ␊ contract TransformNew {␊ function __TransformNew_init() internal onlyInitializing {␊ __TransformNew_init_unchained();␊ }␊ ␊ function __TransformNew_init_unchained() internal onlyInitializing {␊ foo = new Foo();␊ foo.initialize(1);␊ bar = new Bar();␊ bar.initialize();␊ baz = address(new Bar());␊ Bar(baz).initialize();␊ }␊ Foo foo;␊ Bar bar;␊ address baz;␊ }␊ ` ## add storage gaps > Snapshot 1 `pragma solidity ^0.6;␊ ␊ contract Foo0 {␊ ␊ /**␊ * @dev This empty reserved space is put in place to allow future versions to add new␊ * variables without shifting down storage in the inheritance chain.␊ * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps␊ */␊ uint256[50] private __gap;␊ }␊ ␊ contract Foo1 {␊ uint x;␊ ␊ /**␊ * @dev This empty reserved space is put in place to allow future versions to add new␊ * variables without shifting down storage in the inheritance chain.␊ * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps␊ */␊ uint256[49] private __gap;␊ }␊ ␊ contract Foo2 {␊ uint x;␊ bool b1;␊ bool b2;␊ ␊ /**␊ * @dev This empty reserved space is put in place to allow future versions to add new␊ * variables without shifting down storage in the inheritance chain.␊ * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps␊ */␊ uint256[48] private __gap;␊ }␊ ` ## add requested public initializer > Snapshot 1 `pragma solidity ^0.6;␊ ␊ contract FooWithArgs {␊ function initialize(uint x, uint y) public virtual initializer {␊ __FooWithArgs_init(x, y);␊ }␊ constructor(uint x, uint y) public {}␊ }␊ ␊ contract FooWithArgs2 {␊ function initialize(uint x, uint y) public virtual initializer {␊ __FooWithArgs2_init(x, y);␊ }␊ modifier hasModifierArguments(uint x) {␊ _;␊ }␊ constructor(uint x, uint y) public hasModifierArguments(x) {}␊ }␊ ` ## remove immutable > Snapshot 1 `pragma solidity ^0.6.5;␊ ␊ contract TransformImmutable {␊ uint x;␊ constructor() public {␊ x = 3;␊ }␊ }␊ `