DeployTestToken.s.sol 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // SPDX-License-Identifier: UNLICENSED
  2. pragma solidity ^0.8.4;
  3. import {ERC20PresetMinterPauser} from "@openzeppelin/contracts/token/ERC20/presets/ERC20PresetMinterPauser.sol";
  4. import {ERC721PresetMinterPauserAutoId} from "@openzeppelin/contracts/token/ERC721/presets/ERC721PresetMinterPauserAutoId.sol";
  5. import {MockWETH9} from "../contracts/bridge/mock/MockWETH9.sol";
  6. import {TokenImplementation} from "../contracts/bridge/token/TokenImplementation.sol";
  7. import "forge-std/Script.sol";
  8. contract DeployTestToken is Script {
  9. function dryRun() public {
  10. _deploy();
  11. }
  12. function run()
  13. public
  14. returns (
  15. address deployedTokenAddress,
  16. address deployedNFTaddress,
  17. address deployedWETHaddress,
  18. address deployedAccountantTokenAddress,
  19. address transferVerificationTokenA
  20. )
  21. {
  22. vm.startBroadcast();
  23. (
  24. deployedTokenAddress,
  25. deployedNFTaddress,
  26. deployedWETHaddress,
  27. deployedAccountantTokenAddress,
  28. transferVerificationTokenA
  29. ) = _deploy();
  30. vm.stopBroadcast();
  31. }
  32. function _deploy()
  33. internal
  34. returns (
  35. address deployedTokenAddress,
  36. address deployedNFTaddress,
  37. address deployedWETHaddress,
  38. address deployedAccountantTokenAddress,
  39. address transferVerificationTokenA
  40. )
  41. {
  42. address[] memory accounts = new address[](14);
  43. accounts[0] = 0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1;
  44. accounts[1] = 0xFFcf8FDEE72ac11b5c542428B35EEF5769C409f0;
  45. accounts[2] = 0x22d491Bde2303f2f43325b2108D26f1eAbA1e32b;
  46. accounts[3] = 0xE11BA2b4D45Eaed5996Cd0823791E0C93114882d;
  47. accounts[4] = 0xd03ea8624C8C5987235048901fB614fDcA89b117;
  48. accounts[5] = 0x95cED938F7991cd0dFcb48F0a06a40FA1aF46EBC;
  49. accounts[6] = 0x3E5e9111Ae8eB78Fe1CC3bb8915d5D461F3Ef9A9;
  50. accounts[7] = 0x28a8746e75304c0780E011BEd21C72cD78cd535E;
  51. accounts[8] = 0xACa94ef8bD5ffEE41947b4585a84BdA5a3d3DA6E;
  52. accounts[9] = 0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e;
  53. accounts[10] = 0x610Bb1573d1046FCb8A70Bbbd395754cD57C2b60;
  54. accounts[11] = 0x855FA758c77D68a04990E992aA4dcdeF899F654A;
  55. accounts[12] = 0xfA2435Eacf10Ca62ae6787ba2fB044f8733Ee843;
  56. accounts[13] = 0x64E078A8Aa15A41B85890265648e965De686bAE6;
  57. ERC20PresetMinterPauser token = new ERC20PresetMinterPauser(
  58. "Ethereum Test Token",
  59. "TKN"
  60. );
  61. console.log("Token deployed at: ", address(token));
  62. // mint 1000 units
  63. token.mint(accounts[0], 1_000_000_000_000_000_000_000);
  64. ERC721PresetMinterPauserAutoId nft = new ERC721PresetMinterPauserAutoId(
  65. unicode"Not an APE🐒",
  66. unicode"APE🐒",
  67. "https://cloudflare-ipfs.com/ipfs/QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/"
  68. );
  69. nft.mint(accounts[0]);
  70. nft.mint(accounts[0]);
  71. console.log("NFT deployed at: ", address(nft));
  72. MockWETH9 mockWeth = new MockWETH9();
  73. console.log("WETH token deployed at: ", address(mockWeth));
  74. for(uint16 i=2; i<11; i++) {
  75. token.mint(accounts[i], 1_000_000_000_000_000_000_000);
  76. }
  77. ERC20PresetMinterPauser accountantToken = new ERC20PresetMinterPauser(
  78. "Accountant Test Token",
  79. "GA"
  80. );
  81. console.log(
  82. "Accountant test token deployed at: ",
  83. address(accountantToken)
  84. );
  85. // mint 1000 units
  86. accountantToken.mint(accounts[9], 1_000_000_000_000_000_000_000);
  87. for(uint16 i=0; i<11; i++) {
  88. // Give the accounts enough eth to send transactions
  89. vm.deal(accounts[i], 1e18);
  90. }
  91. // Deploy a test token for Transfer Verification
  92. ERC20PresetMinterPauser deployedA = new ERC20PresetMinterPauser(
  93. "TransferVerifier Test Token A",
  94. "TVA"
  95. );
  96. console.log("Test token A deployed at: ", address(deployedA));
  97. // Mint Eth and test tokens to Anvil's default account at index 13.
  98. // This will be used for Transfer Verification integration tests.
  99. // The other accounts created by Anvil are used for other tests in the devnet, so
  100. // using account 14 to send transfers will hopefully cause things to be
  101. // better encapsulated.
  102. deployedA.mint(accounts[13], 1_000_000_000_000_000_000_000);
  103. token.mint(accounts[13], 1_000_000_000_000_000_000_000);
  104. vm.deal(accounts[13], 1e18);
  105. return (
  106. address(token),
  107. address(nft),
  108. address(mockWeth),
  109. address(accountantToken),
  110. address(deployedA)
  111. );
  112. }
  113. }