diff --git a/client/chain/chain_test.go b/client/chain/chain_test.go index 57466e42..4a0c79a1 100644 --- a/client/chain/chain_test.go +++ b/client/chain/chain_test.go @@ -1,23 +1,20 @@ -package chain +package chain_test import ( - "encoding/json" - "io" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + cosmtypes "github.com/cosmos/cosmos-sdk/types" + eth "github.com/ethereum/go-ethereum/common" "os" "testing" - "github.com/stretchr/testify/suite" - "github.com/InjectiveLabs/sdk-go/client" + "github.com/InjectiveLabs/sdk-go/client/chain" "github.com/InjectiveLabs/sdk-go/client/common" - rpchttp "github.com/cometbft/cometbft/rpc/client/http" - "github.com/cosmos/cosmos-sdk/crypto/keyring" - cosmtypes "github.com/cosmos/cosmos-sdk/types" - eth "github.com/ethereum/go-ethereum/common" ) func accountForTests() (cosmtypes.AccAddress, keyring.Keyring, error) { - senderAddress, cosmosKeyring, err := InitCosmosKeyring( + senderAddress, cosmosKeyring, err := chain.InitCosmosKeyring( os.Getenv("HOME")+"/.injectived", "injectived", "file", @@ -30,9 +27,9 @@ func accountForTests() (cosmtypes.AccAddress, keyring.Keyring, error) { return senderAddress, cosmosKeyring, err } -func createClient(senderAddress cosmtypes.AccAddress, cosmosKeyring keyring.Keyring, network common.Network) (ChainClient, error) { +func createClient(senderAddress cosmtypes.AccAddress, cosmosKeyring keyring.Keyring, network common.Network) (chain.ChainClient, error) { tmClient, _ := rpchttp.New(network.TmEndpoint, "/websocket") - clientCtx, err := NewClientContext( + clientCtx, err := chain.NewClientContext( network.ChainId, senderAddress.String(), cosmosKeyring, @@ -46,7 +43,7 @@ func createClient(senderAddress cosmtypes.AccAddress, cosmosKeyring keyring.Keyr // configure Keyring as nil to avoid the account initialization request when running unit tests clientCtx.Keyring = nil - chainClient, err := NewChainClient( + chainClient, err := chain.NewChainClient( clientCtx, network, common.OptionGasPrices(client.DefaultGasPriceWithDenom), @@ -55,72 +52,6 @@ func createClient(senderAddress cosmtypes.AccAddress, cosmosKeyring keyring.Keyr return chainClient, err } -type OfacTestSuite struct { - suite.Suite - network common.Network - tmClient *rpchttp.HTTP - senderAddress cosmtypes.AccAddress - cosmosKeyring keyring.Keyring -} - -func (suite *OfacTestSuite) SetupTest() { - var err error - suite.network = common.LoadNetwork("testnet", "lb") - suite.tmClient, err = rpchttp.New(suite.network.TmEndpoint, "/websocket") - suite.NoError(err) - - suite.senderAddress, suite.cosmosKeyring, err = accountForTests() - suite.NoError(err) - - // Prepare OFAC list file - testList := []string{ - suite.senderAddress.String(), - } - jsonData, err := json.Marshal(testList) - suite.NoError(err) - - ofacListFilename = "ofac_test.json" - file, err := os.Create(getOfacListPath()) - suite.NoError(err) - - _, err = io.WriteString(file, string(jsonData)) - suite.NoError(err) - - err = file.Close() - suite.NoError(err) -} - -func (suite *OfacTestSuite) TearDownTest() { - err := os.Remove(getOfacListPath()) - suite.NoError(err) - ofacListFilename = defaultofacListFilename -} - -func (suite *OfacTestSuite) TestOfacList() { - clientCtx, err := NewClientContext( - suite.network.ChainId, - suite.senderAddress.String(), - suite.cosmosKeyring, - ) - suite.NoError(err) - - clientCtx = clientCtx.WithNodeURI(suite.network.TmEndpoint).WithClient(suite.tmClient) - testChecker, err := NewOfacChecker() - suite.NoError(err) - suite.Equal(1, len(testChecker.ofacList)) - - _, err = NewChainClient( - clientCtx, - suite.network, - common.OptionGasPrices(client.DefaultGasPriceWithDenom), - ) - suite.Error(err) -} - -func TestOfacTestSuite(t *testing.T) { - suite.Run(t, new(OfacTestSuite)) -} - func TestDefaultSubaccount(t *testing.T) { network := common.LoadNetwork("devnet", "lb") senderAddress, cosmosKeyring, err := accountForTests() diff --git a/ofac.json b/client/chain/injective_data/ofac.json similarity index 100% rename from ofac.json rename to client/chain/injective_data/ofac.json diff --git a/client/chain/ofac.go b/client/chain/ofac.go index 499a38d9..32b5fa66 100644 --- a/client/chain/ofac.go +++ b/client/chain/ofac.go @@ -10,12 +10,12 @@ import ( ) const ( - defaultOfacListURL = "https://raw.githubusercontent.com/InjectiveLabs/injective-lists/master/wallets/ofac.json" - defaultofacListFilename = "ofac.json" + DefaultOfacListURL = "https://raw.githubusercontent.com/InjectiveLabs/injective-lists/master/wallets/ofac.json" ) var ( - ofacListFilename = defaultofacListFilename + OfacListPath = "injective_data" + OfacListFilename = "ofac.json" ) type OfacChecker struct { @@ -25,7 +25,7 @@ type OfacChecker struct { func NewOfacChecker() (*OfacChecker, error) { checker := &OfacChecker{ - ofacListPath: ofacListFilename, + ofacListPath: GetOfacListPath(), } if _, err := os.Stat(checker.ofacListPath); os.IsNotExist(err) { if err := DownloadOfacList(); err != nil { @@ -38,12 +38,12 @@ func NewOfacChecker() (*OfacChecker, error) { return checker, nil } -func getOfacListPath() string { - return getFileAbsPath(path.Join("..", "metadata", ofacListFilename)) +func GetOfacListPath() string { + return path.Join(OfacListPath, OfacListFilename) } func DownloadOfacList() error { - resp, err := http.Get(defaultOfacListURL) + resp, err := http.Get(DefaultOfacListURL) if err != nil { return err } @@ -53,7 +53,10 @@ func DownloadOfacList() error { return fmt.Errorf("failed to download OFAC list, status code: %d", resp.StatusCode) } - outFile, err := os.Create(ofacListFilename) + if err := os.MkdirAll(OfacListPath, 0755); err != nil { + return err + } + outFile, err := os.Create(GetOfacListPath()) if err != nil { return err } diff --git a/client/chain/ofac_test.go b/client/chain/ofac_test.go new file mode 100644 index 00000000..ed950a77 --- /dev/null +++ b/client/chain/ofac_test.go @@ -0,0 +1,83 @@ +package chain_test + +import ( + "encoding/json" + "github.com/InjectiveLabs/sdk-go/client" + "github.com/InjectiveLabs/sdk-go/client/chain" + "github.com/InjectiveLabs/sdk-go/client/common" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + cosmtypes "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/suite" + "io" + "os" + "testing" +) + +type OfacTestSuite struct { + suite.Suite + network common.Network + tmClient *rpchttp.HTTP + senderAddress cosmtypes.AccAddress + cosmosKeyring keyring.Keyring + originalOfacPath string +} + +func (suite *OfacTestSuite) SetupTest() { + var err error + suite.network = common.LoadNetwork("testnet", "lb") + suite.tmClient, err = rpchttp.New(suite.network.TmEndpoint, "/websocket") + suite.NoError(err) + + suite.senderAddress, suite.cosmosKeyring, err = accountForTests() + suite.NoError(err) + + // Prepare OFAC list file + testList := []string{ + suite.senderAddress.String(), + } + jsonData, err := json.Marshal(testList) + suite.NoError(err) + + suite.originalOfacPath = chain.OfacListPath + chain.OfacListPath = suite.T().TempDir() + suite.NoError(err) + file, err := os.Create(chain.GetOfacListPath()) + suite.NoError(err) + + _, err = io.WriteString(file, string(jsonData)) + suite.NoError(err) + + err = file.Close() + suite.NoError(err) +} + +func (suite *OfacTestSuite) TearDownTest() { + chain.OfacListPath = suite.originalOfacPath +} + +func (suite *OfacTestSuite) TestOfacList() { + clientCtx, err := chain.NewClientContext( + suite.network.ChainId, + suite.senderAddress.String(), + suite.cosmosKeyring, + ) + suite.NoError(err) + + clientCtx = clientCtx.WithNodeURI(suite.network.TmEndpoint).WithClient(suite.tmClient) + testChecker, err := chain.NewOfacChecker() + suite.NoError(err) + suite.True(testChecker.IsBlacklisted(suite.senderAddress.String())) + suite.False(testChecker.IsBlacklisted("inj1")) + + _, err = chain.NewChainClient( + clientCtx, + suite.network, + common.OptionGasPrices(client.DefaultGasPriceWithDenom), + ) + suite.Error(err) +} + +func TestOfacTestSuite(t *testing.T) { + suite.Run(t, new(OfacTestSuite)) +} diff --git a/injective_data/ofac.json b/injective_data/ofac.json new file mode 100644 index 00000000..59b4160e --- /dev/null +++ b/injective_data/ofac.json @@ -0,0 +1,48 @@ +[ + "0x179f48c78f57a3a78f0608cc9197b8972921d1d2", + "0x1967d8af5bd86a497fb3dd7899a020e47560daaf", + "0x19aa5fe80d33a56d56c78e82ea5e50e5d80b4dff", + "0x19aa5fe80d33a56d56c78e82ea5e50e5d80b4dff", + "0x1da5821544e25c636c1417ba96ade4cf6d2f9b5a", + "0x2f389ce8bd8ff92de3402ffce4691d17fc4f6535", + "0x2f389ce8bd8ff92de3402ffce4691d17fc4f6535", + "0x2f50508a8a3d323b91336fa3ea6ae50e55f32185", + "0x308ed4b7b49797e1a98d3818bff6fe5385410370", + "0x3cbded43efdaf0fc77b9c55f6fc9988fcc9b757d", + "0x3efa30704d2b8bbac821307230376556cf8cc39e", + "0x48549a34ae37b12f6a30566245176994e17c6b4a", + "0x4f47bc496083c727c5fbe3ce9cdf2b0f6496270c", + "0x4f47bc496083c727c5fbe3ce9cdf2b0f6496270c", + "0x4f47bc496083c727c5fbe3ce9cdf2b0f6496270c", + "0x530a64c0ce595026a4a556b703644228179e2d57", + "0x5512d943ed1f7c8a43f3435c85f7ab68b30121b0", + "0x5a7a51bfb49f190e5a6060a5bc6052ac14a3b59f", + "0x5f48c2a71b2cc96e3f0ccae4e39318ff0dc375b2", + "0x6be0ae71e6c41f2f9d0d1a3b8d0f75e6f6a0b46e", + "0x6f1ca141a28907f78ebaa64fb83a9088b02a8352", + "0x746aebc06d2ae31b71ac51429a19d54e797878e9", + "0x77777feddddffc19ff86db637967013e6c6a116c", + "0x797d7ae72ebddcdea2a346c1834e04d1f8df102b", + "0x8576acc5c05d6ce88f4e49bf65bdf0c62f91353c", + "0x901bb9583b24d97e995513c6778dc6888ab6870e", + "0x961c5be54a2ffc17cf4cb021d863c42dacd47fc1", + "0x97b1043abd9e6fc31681635166d430a458d14f9c", + "0x9c2bc757b66f24d60f016b6237f8cdd414a879fa", + "0x9f4cda013e354b8fc285bf4b9a60460cee7f7ea9", + "0xa7e5d5a720f06526557c513402f2e6b5fa20b008", + "0xb6f5ec1a0a9cd1526536d3f0426c429529471f40", + "0xb6f5ec1a0a9cd1526536d3f0426c429529471f40", + "0xb6f5ec1a0a9cd1526536d3f0426c429529471f40", + "0xc455f7fd3e0e12afd51fba5c106909934d8a0e4a", + "0xca0840578f57fe71599d29375e16783424023357", + "0xd0975b32cea532eadddfc9c60481976e39db3472", + "0xd882cfc20f52f2599d84b8e8d58c7fb62cfe344b", + "0xd882cfc20f52f2599d84b8e8d58c7fb62cfe344b", + "0xe1d865c3d669dcc8c57c8d023140cb204e672ee4", + "0xe7aa314c77f4233c18c6cc84384a9247c0cf367b", + "0xed6e0a7e4ac94d976eebfb82ccf777a3c6bad921", + "0xf3701f445b6bdafedbca97d1e477357839e4120d", + "0xfac583c0cf07ea434052c49115a4682172ab6b4f", + "0xfec8a60023265364d066a1212fde3930f6ae8da7", + "0xffbac21a641dcfe4552920138d90f3638b3c9fba" +]