code.vegaprotocol.io/vega@v0.79.0/core/bridges/erc20_logic_test.go (about) 1 // Copyright (C) 2023 Gobalsky Labs Limited 2 // 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU Affero General Public License as 5 // published by the Free Software Foundation, either version 3 of the 6 // License, or (at your option) any later version. 7 // 8 // This program is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU Affero General Public License for more details. 12 // 13 // You should have received a copy of the GNU Affero General Public License 14 // along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16 package bridges_test 17 18 import ( 19 "testing" 20 "time" 21 22 "code.vegaprotocol.io/vega/core/bridges" 23 "code.vegaprotocol.io/vega/libs/num" 24 25 "github.com/stretchr/testify/assert" 26 ) 27 28 const ( 29 erc20BridgeAddr = "0xcB84d72e61e383767C4DFEb2d8ff7f4FB89abc6e" 30 erc20AssetVegaID = "e74758a6708a866cd9262aae09170087f1b8afd7187fca752cd640cb93915fad" 31 erc20AssetAddr = "0x1FaA74E181092A97Fecc923015293ce57eE1208A" 32 ethPartyAddr = "0x1ebe188952ab6035adad21ea1c4f64fd2eac60e1" 33 ) 34 35 func TestERC20Logic(t *testing.T) { 36 t.Run("list asset", testListAsset) 37 t.Run("remove asset", testRemoveAsset) 38 t.Run("withdraw asset", testWithdrawAsset) 39 } 40 41 func testListAsset(t *testing.T) { 42 tcs := []struct { 43 name string 44 v1 bool 45 expected string 46 }{ 47 { 48 name: "v1 scheme", 49 v1: true, 50 expected: "a39fa614b7b4bb0cf5819840164ca48472d1bda98a49053f891dfb004f053d2c29a60df5423927dad057f1d3d6a04c6e6d82f1bf128db5d5a7a01bcc8b70ab0e", 51 }, 52 { 53 name: "v2 scheme", 54 v1: false, 55 expected: "d6810cef5534e232396ab0c572ca079fa41f728a20d98da3bfb59b81f183a96adee103d5f94348e9a8ce823446392109bc8bf10a27076cd0e232a1f808e0810c", 56 }, 57 } 58 59 for _, tc := range tcs { 60 t.Run(tc.name, func(tt *testing.T) { 61 signer := testSigner{} 62 bridge := bridges.NewERC20Logic(signer, erc20BridgeAddr, chainID, tc.v1) 63 sig, err := bridge.ListAsset( 64 erc20AssetAddr, 65 erc20AssetVegaID, 66 num.NewUint(10), 67 num.NewUint(42), 68 num.NewUint(42), 69 ) 70 71 assert.NoError(t, err) 72 assert.NotNil(t, sig.Message) 73 assert.NotNil(t, sig.Signature) 74 assert.True(t, signer.Verify(sig.Message, sig.Signature)) 75 assert.Equal(t, tc.expected, sig.Signature.Hex()) 76 }) 77 } 78 } 79 80 func testRemoveAsset(t *testing.T) { 81 tcs := []struct { 82 name string 83 v1 bool 84 expected string 85 }{ 86 { 87 name: "v1 scheme", 88 v1: true, 89 expected: "a1c183d1c076c518297fa75f0fa3fddf6e5e83e76800a2efdbce36be12d4a23e2b61bce8097fea701f5a274ec89d70f92ffdd83a82a4d2c65f82b905109c3d0f", 90 }, 91 { 92 name: "v2 scheme", 93 v1: false, 94 expected: "f11d5e0fa1c68edd1b43db30a0d02aaff8cef26c6140d30a4570615fa12a0e4e858a30b73a3763590a88614f366e9f433978653445b901e058dc07fe77595901", 95 }, 96 } 97 98 for _, tc := range tcs { 99 t.Run(tc.name, func(tt *testing.T) { 100 signer := testSigner{} 101 bridge := bridges.NewERC20Logic(signer, erc20BridgeAddr, chainID, tc.v1) 102 sig, err := bridge.RemoveAsset( 103 erc20AssetAddr, 104 num.NewUint(42), 105 ) 106 107 assert.NoError(t, err) 108 assert.NotNil(t, sig.Message) 109 assert.NotNil(t, sig.Signature) 110 assert.True(t, signer.Verify(sig.Message, sig.Signature)) 111 assert.Equal(t, tc.expected, sig.Signature.Hex()) 112 }) 113 } 114 } 115 116 func testWithdrawAsset(t *testing.T) { 117 tcs := []struct { 118 name string 119 v1 bool 120 expected string 121 }{ 122 { 123 name: "v1 scheme", 124 v1: true, 125 expected: "8c70e1bb8a74a9112ef475cdca37f63149453f5d3729164847aabf329c8932774922bb3cf41dfd7112fa8a0bdbe3f845b170e8f38406ae51fd7da00177dbc807", 126 }, 127 { 128 name: "v2 scheme", 129 v1: false, 130 expected: "057bcb000d6961d4c8cd67f5a8a8ffac501f7077c23dcb4aab0127f1f4530e865d8627bccfb71559b9ddca0cb938b96c709fdf419d2f350ec9ab6416b888c70f", 131 }, 132 } 133 134 for _, tc := range tcs { 135 t.Run(tc.name, func(tt *testing.T) { 136 signer := testSigner{} 137 bridge := bridges.NewERC20Logic(signer, erc20BridgeAddr, chainID, tc.v1) 138 sig, err := bridge.WithdrawAsset( 139 erc20AssetAddr, 140 num.NewUint(42), // amount 141 ethPartyAddr, 142 time.Unix(1000, 0), 143 num.NewUint(1000), // nonce 144 ) 145 146 assert.NoError(t, err) 147 assert.NotNil(t, sig.Message) 148 assert.NotNil(t, sig.Signature) 149 assert.True(t, signer.Verify(sig.Message, sig.Signature)) 150 assert.Equal(t, tc.expected, sig.Signature.Hex()) 151 }) 152 } 153 }