From b64b12db629712d8ee2011989505bcbdd0d84506 Mon Sep 17 00:00:00 2001 From: sh-cha Date: Tue, 29 Oct 2024 19:05:06 +0900 Subject: [PATCH] fetching code bytes with precompile readlib func --- app/upgrade.go | 37 +++++++++---------------------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/app/upgrade.go b/app/upgrade.go index ad25b2bc..823622c4 100644 --- a/app/upgrade.go +++ b/app/upgrade.go @@ -11,6 +11,7 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" movetypes "github.com/initia-labs/initia/x/move/types" + vmprecompile "github.com/initia-labs/movevm/precompile" vmtypes "github.com/initia-labs/movevm/types" ) @@ -54,13 +55,11 @@ func (app *InitiaApp) RegisterUpgradeHandlers(cfg module.Configurator) { func(ctx context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { // 1. publish new code module first - - encodedCodeModule := "oRzrCwcAAAoMAQAUAhQ4A0z6AQTGAiIF6AKaAweCBsQFCMYLIAbmCyIQiAzXBgrfEiAM/xL6CA35GwgAAAAEAAYADwASABUAHQAgACQANwABCAABAwQCAwEAAQIFBwAABwcAAAkGAAALCAAFFwcCAAAAAAYcBwEAAQgmBwEAAAEoAgIDAQABAAwAAQABAA4CAAABAxAEBQEAAQMRBgUBAAEEEwcHAAEAFAkAAAEFFgALAgQEAQUYDQUCBAQBBRkOAAIEBAEAGhAFAAEAGxEAAAEGHhMDAQgBBB8HBwABByEUAwABBiIVBQEIAQQjBwcAAQglABYBAAEBJxgZAgMAAQEpGQUCAwABASoZGgIDAAEAKwcAAAEALB0AAAEBLQAeAgMEAQEZHwACAwABAC4gAAABAC8UAAABADAjAAABADEkAAABADIlAAABAA0ABwABADMnAAABAREpBQIDAAEBNCkqAgMAAQA1LAAAAQE2LS4CAwABCTgwAAECAQA5MgAAAQIDAwMGCgcKCAoLEg4SEAwRFxIXExcWFxcXHxcgFyIXIy8AAQoFAgYKBQUBBQEGCgkAAQECBgoJAAYJAAEDAgEGBQEGCggCAggCAQELBgIJAAkBAQgCAgYLBgIJAAkBBgkAAwcLBgIJAAkBCQAJAQULBgIIAgEDAwYIAgMCAgICBgwLBwEIAAEIAAEGCwcBCQABBgwCCwcBCQAFAQsIAQkAAggCCAMEBwsBAgkACQELCAEJAAsIAQkAAgEHCwkCCQAJAQIJAAcJAQcFCwcBCAAFBwsJAggCCAMCBwgDBwIBBwgFAwYMCggCCgUBCwECCQAJAQMHCwECCQAJAQkACQECBgwKBQoGCggCCwECCAIIAwMDBwsBAggCCAMGCAIIAwgCAwgAAQgFBAYMCggCCgoCAgMGDAoKAgIDBQoKAgIBBwoFAwoKBQoKCAICAQoIAgIGCwECCQAJAQkAAQYJAQUKBQoIAgUIAgYIAAMGDAoIAgICBwsBAgkACQEJAAEHCQEBCAQBCQARBgoIAgcIBQIBBQYMCAADBwsBAggCCAMDAwYIAggCBwgDBwIIAwMFBgwKCAIKCgUKCggCAgRjb2RlDU1ldGFkYXRhU3RvcmUIbWV0YWRhdGEFVGFibGUFdGFibGUGU3RyaW5nBnN0cmluZw5Nb2R1bGVNZXRhZGF0YQ51cGdyYWRlX3BvbGljeRRNb2R1bGVQdWJsaXNoZWRFdmVudAltb2R1bGVfaWQLTW9kdWxlU3RvcmUSYWxsb3dlZF9wdWJsaXNoZXJzDXRvdGFsX21vZHVsZXMOYXNzZXJ0X2FsbG93ZWQGdmVjdG9yCGlzX2VtcHR5CGNvbnRhaW5zBWVycm9yEGludmFsaWRfYXJndW1lbnQVYXNzZXJ0X25vX2R1cGxpY2F0aW9uCnNpbXBsZV9tYXAGY3JlYXRlCVNpbXBsZU1hcAxjb250YWluc19rZXkDYWRkHGNhbl9jaGFuZ2VfdXBncmFkZV9wb2xpY3lfdG8SZnJlZXplX2NvZGVfb2JqZWN0Bk9iamVjdAZvYmplY3QOb2JqZWN0X2FkZHJlc3MJbm90X2ZvdW5kBnNpZ25lcgphZGRyZXNzX29mCGlzX293bmVyEXBlcm1pc3Npb25fZGVuaWVkBm9wdGlvbgRub25lBk9wdGlvbghpdGVyX211dAlUYWJsZUl0ZXILcHJlcGFyZV9tdXQIbmV4dF9tdXQWaW5jcmVhc2VfdG90YWxfbW9kdWxlcwxpbml0X2dlbmVzaXMDbmV3FnNldF9hbGxvd2VkX3B1Ymxpc2hlcnMLaW5pdF9tb2R1bGUHcHVibGlzaApwdWJsaXNoX3YyD3JlcXVlc3RfcHVibGlzaCJ2ZXJpZnlfZGVwZW5kZW5jaWVzX3VwZ3JhZGVfcG9saWN5BmJvcnJvdx12ZXJpZnlfbW9kdWxlc191cGdyYWRlX3BvbGljeQpib3Jyb3dfbXV0BWV2ZW50BGVtaXQWdmVyaWZ5X3B1Ymxpc2hfcmVxdWVzdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRjb21waWxhdGlvbl9tZXRhZGF0YQkAAzIuMAMyLjATaW5pdGlhOjptZXRhZGF0YV92MKIGCgEAAAAAAAAAEkVVUEdSQURFX0lNTVVUQUJMRSRDYW5ub3QgdXBncmFkZSBhbiBpbW11dGFibGUgcGFja2FnZS4CAAAAAAAAABZFVVBHUkFERV9XRUFLRVJfUE9MSUNZMkNhbm5vdCBkb3duZ3JhZGUgYSBwYWNrYWdlJ3MgdXBncmFkYWJpbGl0eSBwb2xpY3kuAwAAAAAAAAAbRVVQR1JBREVfUE9MSUNZX1VOU1BFQ0lGSUVEIFVwZ3JhZGUgcG9saWN5IGlzIG5vdCBzcGVjaWZpZWQuBAAAAAAAAAAXRUlOVkFMSURfQ0hBSU5fT1BFUkFUT1I5VGhlIG9wZXJhdGlvbiBpcyBleHBlY3RlZCB0byBiZSBleGVjdXRlZCBieSBjaGFpbiBzaWduZXIuBQAAAAAAAAAbRUlOVkFMSURfQUxMT1dFRF9QVUJMSVNIRVJTJ2FsbG93ZWRfcHVibGlzaGVycyBhcmd1bWVudCBpcyBpbnZhbGlkLgYAAAAAAAAAFEVEVVBMSUNBVEVfTU9EVUxFX0lEHFRoZSBtb2R1bGUgSUQgaXMgZHVwbGljYXRlZC4HAAAAAAAAABJFTk9UX1BBQ0tBR0VfT1dORVImTm90IHRoZSBvd25lciBvZiB0aGUgcGFja2FnZSByZWdpc3RyeS4IAAAAAAAAABtFQ09ERV9PQkpFQ1RfRE9FU19OT1RfRVhJU1QdYGNvZGVfb2JqZWN0YCBkb2VzIG5vdCBleGlzdC4JAAAAAAAAABRFUEFDS0FHRV9ERVBfTUlTU0lORzpEZXBlbmRlbmN5IGNvdWxkIG5vdCBiZSByZXNvbHZlZCB0byBhbnkgcHVibGlzaGVkIHBhY2thZ2UuCgAAAAAAAAASRURFUF9XRUFLRVJfUE9MSUNZMUEgZGVwZW5kZW5jeSBjYW5ub3QgaGF2ZSBhIHdlYWtlciB1cGdyYWRlIHBvbGljeS4BFE1vZHVsZVB1Ymxpc2hlZEV2ZW50AQQAAg10b3RhbF9tb2R1bGVzAQEAEmFsbG93ZWRfcHVibGlzaGVycwEBAAACAQILAQIIAggDAwIBCAIEAgIKCAIIAgUCAgwKBQ0DAAEAAQMABQcAKwMQABQCAQAAAAgVCgA4AAQICwABCAwCBQ4OAQwDCwALAzgBDAILAgQRBRQGBQAAAAAAAAARBCcCBQAAAA8qOAIMAQYAAAAAAAAAAAwCCgBBDAwDCgIKAyMEJQoACgJCDAwEDgEKBDgDAxQFGwsAAQsEAQYGAAAAAAAAABEEJw0BCwQUCDgECwIGAQAAAAAAAAAWDAIFKAsAAQUpBQcCCQEAAAAECwALASUCCgEAAQAbMQ4BOAUMAgoCKQAEBwUMCwABBggAAAAAAAAAEQwnCwEMAwsAEQ0MBAsDCwQ4BgQWBRkGBwAAAAAAAAARDycLAioADwE4BzgHMQE4CAwFCgU4CQMnCwUBBTAKBTgKDwIMCDECCwgVAQUhAhQAAAEDHAwHACoDDAEKARADFAsAFgsBDwMVAhUAAAEDIT4KABENBwAhBAYFCwsAAQYEAAAAAAAAABEPJw4BEQU4CwwEDgEMAwYAAAAAAAAAAAwFCgNBDAwGCgUKBiMELQoDCgVCDA0EDAcUMQESAQwJDAoLBwsKCwk4DAsFBgEAAAAAAAAAFgwFBTALAwEFMQUWCwQSAAwMCgALDC0ACwALAhEYDgFBDBEUAhkAAAAiCEADAAAAAAAAAAAGAAAAAAAAAAASAwwBCwALAS0DAhoBBAAABQsACwILAxEbAhsBBAAABgsAEQ0LAQsCERwCHAACABgBBAEDJhQLABENBwAhBAYFCQYEAAAAAAAAABEPJw4BBwARAQcAKgMPAAwCCwELAhUCHQEAAQMABQcAKwMQAxQCHgAAAQArPw4AQQEGAAAAAAAAAAAkBDwNAEUBDAMNAUUoDAQOA0EDBgAAAAAAAAAAJAQ5DQNFAwwFDQRFDAwGCgUpAAQaBR0GCQAAAAAAAAARDCcLBSsADAcKBxABCgY4DQQmBSsLBwEGCQAAAAAAAAARDCcLBxABCwY4DhACFAoCJgQ1BTgGCgAAAAAAAAARBCcFOgU7BQsFPQU+BQACIQAAAgADMaIBDgERBQcAKgMMBAoCMQEhBAwIDAYFEAoCMQIhDAYLBgQTBRoLAAELBAEGAwAAAAAAAAARBCcKABENDAcLBBAACgcRAQoHKQADLQsADAg4CxIADAkLCAsJLQAFLwsAAQYAAAAAAAAAAAwKCwcqAA8BDAsOAQwDBgAAAAAAAAAADAwKA0EMDA0KDAoNIwSUAQoDCgxCDAwOCgsuCg4UOA0EfAoOFAwPCgsLDzgPDBAKEBACFDECIwRYBWMLCwELAwELDgELEAEGAQAAAAAAAAARBCcKEBACFAoCEQkEagV1CwsBCwMBCw4BCxABBgIAAAAAAAAAEQQnCxAPAgwRCgILERUFigEKDhQKAhIBDBIMDwoLCw8LEjgMCwoGAQAAAAAAAAAWDAoLDhQKAhICOBALDAYBAAAAAAAAABYMDAWZAQsLAQsDAQWaAQU8CgoGAAAAAAAAAAAkBKEBCwoRFAWhAQIkAAACAAMACQsACwEKBBEhCwILAwsEER4CAwAAAAEAAwEA" - codeModuleBz, err := base64.StdEncoding.DecodeString(encodedCodeModule) + codeModuleBz, err := vmprecompile.ReadStdlib("code.move") if err != nil { - return nil, sdkerrors.Wrap(err, "failed to decode module code") + return nil, err } - err = app.MoveKeeper.SetModule(ctx, vmtypes.StdAddress, movetypes.MoveModuleNameCode, codeModuleBz) + err = app.MoveKeeper.SetModule(ctx, vmtypes.StdAddress, movetypes.MoveModuleNameCode, codeModuleBz[0]) if err != nil { return nil, err } @@ -120,30 +119,12 @@ func (app *InitiaApp) RegisterUpgradeHandlers(cfg module.Configurator) { } // 3. update new modules - - // TODO: check the diff and update the code again - codes := []string{ - // object_code_deployment.move - "oRzrCwcAAAoMAQAUAhQmAzp9BLcBEAXHAZgBB98CoAMI/wUgBp8GJhDFBrgCCv0IFQySCfEBDYMLAgAAAAQADAANABEAEwAVABcAGQAhAAEIAAEDBgAABQYAAAcGAAAIBgABCgcBAAECCwgABBAHAAEcAgAACQABAAECCQABAAEBBgMEAQgBAw4GAQECAQAPBwEAAQASCAEAAQUUCQQAAQYWBAoAAQcYDQwBAAEIGg4BAQABARsPEAABAR0REgABAhITAQABAR4RFQABAB8XAQABASAYGQEIAQkiCgoAAQkjCgoAAQEkGhIAAQIPGwEAAQICAwUIDAkLCAoDFA8CAxwCBgwLBQEIBgABCAYBBgsFAQkAAQUBCAIBCQADBgwKCAcKCgICBgwKCgIBBgwBAwECAQoCAQYJAAIHCgkACgkAAgYMCgIBCAgBBggIAQwDBgwKCgICAQgDAQgBCQMKAgoCCgIICAYICAwCCAAEBgwKCAcKCgILBQEIBgILBQEJAAUBAQEGCAEEBgwKCAcKCgICAQgEAwUMAhZvYmplY3RfY29kZV9kZXBsb3ltZW50DE1hbmFnaW5nUmVmcwpleHRlbmRfcmVmCUV4dGVuZFJlZgZvYmplY3QGRnJlZXplDm9iamVjdF9hZGRyZXNzB1B1Ymxpc2gHVXBncmFkZRJmcmVlemVfY29kZV9vYmplY3QGT2JqZWN0DU1ldGFkYXRhU3RvcmUEY29kZQVldmVudARlbWl0B3B1Ymxpc2gGU3RyaW5nBnN0cmluZwpwdWJsaXNoX3YyBnNpZ25lcgphZGRyZXNzX29mB2FjY291bnQTZ2V0X3NlcXVlbmNlX251bWJlcgNiY3MIdG9fYnl0ZXMGdmVjdG9yBmFwcGVuZBNjcmVhdGVfbmFtZWRfb2JqZWN0DkNvbnN0cnVjdG9yUmVmD2dlbmVyYXRlX3NpZ25lchNnZW5lcmF0ZV9leHRlbmRfcmVmB3VwZ3JhZGUIaXNfb3duZXIFZXJyb3IRcGVybWlzc2lvbl9kZW5pZWQJbm90X2ZvdW5kHWdlbmVyYXRlX3NpZ25lcl9mb3JfZXh0ZW5kaW5nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEKAiMiaW5pdGlhX3N0ZDo6b2JqZWN0X2NvZGVfZGVwbG95bWVudBRjb21waWxhdGlvbl9tZXRhZGF0YQkAAzIuMAMyLjATaW5pdGlhOjptZXRhZGF0YV92MIMCAwEAAAAAAAAAJUVPQkpFQ1RfQ09ERV9ERVBMT1lNRU5UX05PVF9TVVBQT1JURUQtT2JqZWN0IGNvZGUgZGVwbG95bWVudCBmZWF0dXJlIG5vdCBzdXBwb3J0ZWQuAgAAAAAAAAAWRU5PVF9DT0RFX09CSkVDVF9PV05FUiJOb3QgdGhlIG93bmVyIG9mIHRoZSBgY29kZV9vYmplY3RgAwAAAAAAAAAbRUNPREVfT0JKRUNUX0RPRVNfTk9UX0VYSVNUHWBjb2RlX29iamVjdGAgZG9lcyBub3QgZXhpc3QuAwZGcmVlemUBBAAHUHVibGlzaAEEAAdVcGdyYWRlAQQAAAACAQIIAQICAQYFAwIBBgUEAgEGBQABBAABCAsACgERAQ4BOAASATgBAgQBBAABBAsACwIRBQIFAQQAFi8KABEGEQcGAQAAAAAAAAAWDAJACwAAAAAAAAAADAMNAwcADAQOBDgCOAMNAw4COAQ4AwsDDAULAAsFEQoMBg4GDAcKBxELDAgOCAwACgALATEBEQwKABEGEgI4BQsHEQ0SAAwKCwALCi0AAg4BBAEAHSYLABEGDAQKAwsEOAYECAULBgIAAAAAAAAAERAnDgM4AAwECgQpAAQSBRUGAwAAAAAAAAAREScLBCsAEAAREgwFDgUMAAoACwELAjEBERMLABEGEgM4BwIAAAA=", - // coin.move - "oRzrCwcAAAoNAQAYAhhGA160AwSSBCAFsgSBAwezB9EICIQQIAakEDwQ4BDjAgrDEzEM9BPiBw3WGwwP4hsEAAAABAAGABYAGAAlADAAMgA3ADkASABRAAEGAAEDBwEAAQIFCwAABwABAAEACQYAAAsGAAAMCAACDgYAAhAGAAISBgAAEwYAAxUHAAIfAAAFJAcBAAABPwYAAUECAAAUAAEAAQIUAwEBCAEAFwUEAAEEFwYEAQgBAAIHAAABABkHCAABARoIAwEIAQAbAAEAAQIbAwEBCAEAHAAJAAECHAMJAQgBAB0KCwABBB0MCwEIAQAeDQQAAQEgDggBCAECHg8EAAEAIREEAAEEIREEAAEAIgoSAAEEIgwSAQgBACMAEwABAiMDEwEIAQAmFBUAAQImFhUAAQAnFwQAAQQmGAQAAQAoEQQAAQQoEQQAAQApGQQAAQAqGgQAAQQpBgQBCAEAKwATAAECKwMTAQgBACwbFQABBCwcFQEIAQMtHR4AAQEuHwgAAQAvICEAAQQvICEAAQYxGggAAQczCwsAAQA0AQAAAQM1HQsAAQM2IgEAAQg4HSMAAQk6IwgAAQA7JQQAAQQ8JgQAAQA9KCkAAQA+KCoAAQFAKywAAQRCLQQAAQJDLi8AAQJELjAAAQJFLjEAAQFGLjIAAQFHLggAAQpJNAQBAgEBSi4DAQgBAUsuNQABAEwIEgABAE0HEgABAE4AAQABAU83EgEIAQNQIwEAAQtSOCMBAAEIUx4BAAEDVDkEAAEAVTsEAAEAViUEAAEBAgMCBgIIAgoCDAIOAhMCFQIeAiACIgI5MzoCPwJBCAELAQEIAgEICwEIAgELAQEJAAAEBgwFCwEBCAIDBAYMCwEBCQAFAwIFCAsBBQECAgULAQEIAgEDAgULAQEJAAIGCAAIDAEGCwEBCQACBggICAwCCwEBCAIFAgUIDAEBAQsNAQQCBggKAwEIDAIGCAcDAwYICgUDAwYIBwUDBQYMBgwFCwEBCAIDAQYMAwYMCwEBCAIDAwYMCwEBCQADAQYICwEGCgICBgUKAgMFCw0BBQICCgsBAQgCCgMDBggLAwMBCgIGCgIICwEDCAsFAgYIBQUDBggJBQEECwEBCAIFAQYICQcGDAsNAQQICwgLAggLCAsDCAoIAAgFBAgKCAAIBQgOAgYMCgIBCA8HBggPCw0BBAgLCAsCCAsICwEGCA8BCAcBCAgBCAkBDAEIBAEJAAEIDgkKAggPBggPDAgJCAgIBwgGCwEBCAICCwEBCQAFAQYJAAIHCAsICwgFCAsFCAsICwEICwoCBQYMBgwLAQEIAgoFCgMGCgUKAwMDAwUEY29pbg5CdXJuQ2FwYWJpbGl0eQhtZXRhZGF0YQZPYmplY3QGb2JqZWN0CE1ldGFkYXRhDmZ1bmdpYmxlX2Fzc2V0BENvaW4LZHVtbXlfZmllbGQQQ29pbkNyZWF0ZWRFdmVudA1tZXRhZGF0YV9hZGRyEEZyZWV6ZUNhcGFiaWxpdHkMTWFuYWdpbmdSZWZzCG1pbnRfcmVmB01pbnRSZWYIYnVybl9yZWYHQnVyblJlZgx0cmFuc2Zlcl9yZWYLVHJhbnNmZXJSZWYOTWludENhcGFiaWxpdHkEbmFtZQZTdHJpbmcGc3RyaW5nCHRyYW5zZmVyFnByaW1hcnlfZnVuZ2libGVfc3RvcmUQbWV0YWRhdGFfYWRkcmVzcxFhZGRyZXNzX3RvX29iamVjdAZzeW1ib2wIZGVjaW1hbHMHYmFsYW5jZQRidXJuDUZ1bmdpYmxlQXNzZXQOb2JqZWN0X2FkZHJlc3MHZGVwb3NpdAlpc19mcm96ZW4HbWF4aW11bQZPcHRpb24Gb3B0aW9uBG1pbnQHbWludF90bwxzdWRvX2RlcG9zaXQNc3Vkb190cmFuc2ZlcgpjaGVja19zdWRvBnN1cHBseQh3aXRoZHJhdwVieXRlcxVjcmVhdGVfb2JqZWN0X2FkZHJlc3MIYmFsYW5jZXMGc2lnbmVyCmFkZHJlc3Nfb2YFZXJyb3IRcGVybWlzc2lvbl9kZW5pZWQRZGVub21fdG9fbWV0YWRhdGEGbGVuZ3RoCnN1Yl9zdHJpbmcDaGV4DWRlY29kZV9zdHJpbmcIZnJvbV9iY3MKdG9fYWRkcmVzcxFmcmVlemVfY29pbl9zdG9yZQ9zZXRfZnJvemVuX2ZsYWcKaW5pdGlhbGl6ZSJpbml0aWFsaXplX2FuZF9nZW5lcmF0ZV9leHRlbmRfcmVmCUV4dGVuZFJlZhNjcmVhdGVfbmFtZWRfb2JqZWN0DkNvbnN0cnVjdG9yUmVmK2NyZWF0ZV9wcmltYXJ5X3N0b3JlX2VuYWJsZWRfZnVuZ2libGVfYXNzZXQRZ2VuZXJhdGVfbWludF9yZWYRZ2VuZXJhdGVfYnVybl9yZWYVZ2VuZXJhdGVfdHJhbnNmZXJfcmVmD2dlbmVyYXRlX3NpZ25lchxhZGRyZXNzX2Zyb21fY29uc3RydWN0b3JfcmVmBWV2ZW50BGVtaXQbb2JqZWN0X2Zyb21fY29uc3RydWN0b3JfcmVmE2dlbmVyYXRlX2V4dGVuZF9yZWYHaXNfY29pbhFpc19jb2luX2J5X3N5bWJvbBFtZXRhZGF0YV90b19kZW5vbQhpc19vd25lcgR1dGY4A2Jjcwh0b19ieXRlcxBlbmNvZGVfdG9fc3RyaW5nBmFwcGVuZA5zdWRvX211bHRpc2VuZBN1bmZyZWV6ZV9jb2luX3N0b3JlDG1hbmFnZWRfY29pbgdzdGFraW5nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCgIGBW1vdmUvCgIFBElOSVQKAgYFdWluaXQUY29tcGlsYXRpb25fbWV0YWRhdGEJAAMyLjADMi4wE2luaXRpYTo6bWV0YWRhdGFfdjCuAgIBAAAAAAAAAA1FVU5BVVRIT1JJWkVEAAIAAAAAAAAAG0VSUl9NQU5BR0lOR19SRUZTX05PVF9GT1VORBpNYW5hZ2luZ1JlZnMgaXMgbm90IGZvdW5kLgEQQ29pbkNyZWF0ZWRFdmVudAEEAA4EbmFtZQEBAAZzdXBwbHkBAQAGc3ltYm9sAQEAB2JhbGFuY2UBAQAHaXNfY29pbgEBAAdtYXhpbXVtAQEACGJhbGFuY2VzAQEACGRlY2ltYWxzAQEACG1ldGFkYXRhAQEACWlzX2Zyb3plbgEBABBtZXRhZGF0YV9hZGRyZXNzAQEAEWRlbm9tX3RvX21ldGFkYXRhAQEAEWlzX2NvaW5fYnlfc3ltYm9sAQEAEW1ldGFkYXRhX3RvX2Rlbm9tAQEAAAIBAgsBAQgCAwIBCAEEAgEKBQUCAQILAQEIAgYCAw0IBw8ICBEICQoCAQILAQEIAgABAAAEAwsAOAACAgEEAAQGCwALAgsBCwM4AQIEAQAABAULAAsBEQU4AgIHAQAABAMLADgDAgkBAAAEAwsAOAQCCwEAAAQECwALATgFAg0BAAEEEBMLABAAFAwCDgI4BgwDCgMpBAQLBQ0GAgAAAAAAAAAnCwMrBBABCwERDwIQAQAABAQLAAsBERECEgEAAAQECwALATgHAhQBAAAEAwsAOAgCFgEAAQQQEwsAEAIUDAIOAjgGDAMKAykEBAsFDQYCAAAAAAAAACcLAysEEAMLAREXAhgBAAEEEBQLABACFAwDDgM4BgwECgQpBAQLBQ0GAgAAAAAAAAAnCwQrBBADCwELAhEZAhoDAAAEBAsACwERGwIcAQQABAgLABEdCwELAwsCCwQ4CQIfAQAABAMLADgKAiEBAAAEBQsACwELAjgLAgUBAAAEBg4ADgERIxQRJAIlAQAABAULAAsBCwIRJgIdAAAABAoLABEnBwAhBAYFCQYBAAAAAAAAABEoJwIpAQAAJCoOABEqBgUAAAAAAAAAJAQSBwEMAQ4BDgAGAAAAAAAAAAAGBQAAAAAAAAARKwwCDgIRIyEMAwUUCQwDCwMEIw4AESoMBA4ABgUAAAAAAAAACwQRKwwFDgURLBEtDAYFJwcACwARBQwGCwY4AgIuAQABBCcUCwAQBBQMAg4COAYMAwoDKQQECwUNBgIAAAAAAAAAJwsDKwQQBQsBCBEvAjABAAAECgsACwELAgsDCwQLBQsGETEBAjEBAAA2Mg4DESMUDAcLAAsHETIMCA4IDAkKCQsBCwILAwsECwULBhEzCgkRNAoJETUKCRE2CgkRNwwKDgoMABIEDA4LAAsOLQQKCRE4EgI4DAoJOA0MDwoPEgUKDxIACw8SAwsJETsCPAEAAAQDCwApBAI9AQAABAULAAsBEQUpBAI+AQAAOjIOADgGDAEKABEHDAILAAcAOA4EFAoCDAQHAhFADAULBAsFIQwGBRYJDAYLBgQcBwMRQAwCBRwHAAoCEQUKASEEJAsCAgcBEUAMBw4BOA8MCA4IEUIMAg0HCwIRQwsHAkQBBAA8NAsAER0LAwwFCwQMBg4FQQgMBwoHDAgOBkELDAkLCAsJIQQTBRcLAQEGAgACAAAAAAAnCgcGAAAAAAAAAAAkBCsNBUUIDQZFCwwIDAoKAQoCCwoLCDgJCwcGAQAAAAAAAAAXDAcFLgsBAQUvBRcLBUYIAAAAAAAAAAALBkYLAAAAAAAAAAACRQEAAQQnFAsAEAQUDAIOAjgGDAMKAykEBAsFDQYCAAAAAAAAACcLAysEEAULAQkRLwIAAAQBBQAEAAMABAIAVwBYAA==", - // dex.move - "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Y29pbl9iD2xpcXVpZGl0eV90b2tlbg1jb2luX2FfYW1vdW50DWNvaW5fYl9hbW91bnQJbGlxdWlkaXR5EENvaW5DYXBhYmlsaXRpZXMIYnVybl9jYXAOQnVybkNhcGFiaWxpdHkEY29pbgpmcmVlemVfY2FwEEZyZWV6ZUNhcGFiaWxpdHkIbWludF9jYXAOTWludENhcGFiaWxpdHkGQ29uZmlnCmV4dGVuZF9yZWYJRXh0ZW5kUmVmBm9iamVjdAd3ZWlnaHRzB1dlaWdodHMNc3dhcF9mZWVfcmF0ZQpCaWdEZWNpbWFsCmJpZ2RlY2ltYWwOQ29uZmlnUmVzcG9uc2UPQ3JlYXRlUGFpckV2ZW50FUN1cnJlbnRXZWlnaHRSZXNwb25zZQ1jb2luX2Ffd2VpZ2h0DWNvaW5fYl93ZWlnaHQORmxhc2hTd2FwRXZlbnQKb2ZmZXJfY29pbgtyZXR1cm5fY29pbgxvZmZlcl9hbW91bnQNcmV0dXJuX2Ftb3VudApmZWVfYW1vdW50DUZsYXNoU3dhcExvY2sUY29pbl9hX2JvcnJvd19hbW91bnQUY29pbl9iX2JvcnJvd19hbW91bnQQRmxhc2hTd2FwUmVjZWlwdAlwYWlyX2FkZHITUGFpckJ5RGVub21SZXNwb25zZQZTdHJpbmcGc3RyaW5nEVBhaXJEZW5vbVJlc3BvbnNlDGNvaW5fYV9kZW5vbQxjb2luX2JfZGVub20UUGFpck1ldGFkYXRhUmVzcG9uc2UPY29pbl9hX21ldGFkYXRhBk9iamVjdAhNZXRhZGF0YQ5mdW5naWJsZV9hc3NldA9jb2luX2JfbWV0YWRhdGEEUG9vbAxjb2luX2Ffc3RvcmUNRnVuZ2libGVTdG9yZQxjb2luX2Jfc3RvcmUQUG9vbEluZm9SZXNwb25zZQt0b3RhbF9zaGFyZQxQcm92aWRlRXZlbnQXU2luZ2xlQXNzZXRQcm92aWRlRXZlbnQMcHJvdmlkZV9jb2luDnByb3ZpZGVfYW1vdW50CVN3YXBFdmVudBJTd2FwRmVlVXBkYXRlRXZlbnQMVGVzdE1ldGFkYXRhC2xwX21ldGFkYXRhDm9mZmVyX21ldGFkYXRhD3JldHVybl9tZXRhZGF0YQZXZWlnaHQJdGltZXN0YW1wDndlaWdodHNfYmVmb3JlDXdlaWdodHNfYWZ0ZXIEc3dhcA1GdW5naWJsZUFzc2V0Dm9iamVjdF9hZGRyZXNzFGFzc2VydF9wb29sX3VubG9ja2VkBmFtb3VudBNtZXRhZGF0YV9mcm9tX2Fzc2V0EWdlbmVyYXRlX3BhaXJfa2V5BWVycm9yEGludmFsaWRfYXJndW1lbnQJcG9vbF9pbmZvD3N3YXBfc2ltdWxhdGlvbh1nZW5lcmF0ZV9zaWduZXJfZm9yX2V4dGVuZGluZwdkZXBvc2l0CHdpdGhkcmF3BWV2ZW50BGVtaXQLaW5pdF9tb2R1bGUDbmV3DWludmFsaWRfc3RhdGUOYXNzZXJ0X3dlaWdodHMDb25lA2FkZAJlcRpjYWxjdWxhdGVfZmVlX3dpdGhfbWluaW11bQ9tdWxfYnlfdTY0X2NlaWwpY2FsY3VsYXRlX3Byb3ZpZGVfbGlxdWlkaXR5X3JldHVybl9hbW91bnQMcG9vbF9hbW91bnRzBnN1cHBseQZPcHRpb24Gb3B0aW9uB2V4dHJhY3QOZnJvbV9yYXRpb191NjQCZ3QUbXVsX2J5X3UxMjhfdHJ1bmNhdGU2Y2FsY3VsYXRlX3NpbmdsZV9hc3NldF9wcm92aWRlX2xpcXVpZGl0eV9yZXR1cm5fYW1vdW50D2NoZWNrX2xicF9lbmRlZA5zdG9yZV9tZXRhZGF0YQpnZXRfd2VpZ2h0A2RpdgNzdWITbXVsX2J5X3U2NF90cnVuY2F0ZQNwb3cWY2hlY2tfY2hhaW5fcGVybWlzc2lvbgZzaWduZXIKYWRkcmVzc19vZhFwZXJtaXNzaW9uX2RlbmllZAVibG9jaw5nZXRfYmxvY2tfaW5mbwxjb2luX2FkZHJlc3MOYXNzZXRfbWV0YWRhdGEWY3JlYXRlX2xicF9wYWlyX3NjcmlwdAtjcmVhdGVfcGFpcgRub25lBHV0ZjgiaW5pdGlhbGl6ZV9hbmRfZ2VuZXJhdGVfZXh0ZW5kX3JlZgxtYXhfZmVlX3JhdGUCbGUMdHJhbnNmZXJfcmF3FnByaW1hcnlfZnVuZ2libGVfc3RvcmUUY3JlYXRlX3ByaW1hcnlfc3RvcmURYWRkcmVzc190b19vYmplY3QRcHJvdmlkZV9saXF1aWRpdHkSY3JlYXRlX3BhaXJfc2NyaXB0CmZsYXNoX3N3YXAcZ2V0X3N3YXBfc2ltdWxhdGlvbl93aXRoX2ZlZQdpc19ub25lBmJvcnJvdw1nZXRfYWxsX3BhaXJzB2lzX3NvbWUEc29tZQRpdGVyCVRhYmxlSXRlcgdwcmVwYXJlBG5leHQWZ2V0X2FsbF9wYWlyc19ieV9kZW5vbRFkZW5vbV90b19tZXRhZGF0YRFtZXRhZGF0YV90b19kZW5vbSlnZXRfY29pbl9hX2Ftb3VudF9mcm9tX3Bvb2xfaW5mb19yZXNwb25zZR1nZXRfY29pbl9hX3dlaWdodF9mcm9tX3dlaWdodClnZXRfY29pbl9iX2Ftb3VudF9mcm9tX3Bvb2xfaW5mb19yZXNwb25zZR1nZXRfY29pbl9iX3dlaWdodF9mcm9tX3dlaWdodApnZXRfY29uZmlnE2dldF9jb25maWdfYnlfZGVub20HY29udmVydBJnZXRfY3VycmVudF93ZWlnaHQbZ2V0X2N1cnJlbnRfd2VpZ2h0X2J5X2Rlbm9tDmdldF9wYWlyX2Rlbm9tEWdldF9wYWlyX21ldGFkYXRhCWdldF9wYWlycw1nZXRfcG9vbF9pbmZvFmdldF9wb29sX2luZm9fYnlfZGVub20WZ2V0X3Byb3ZpZGVfc2ltdWxhdGlvbiNnZXRfc2luZ2xlX2Fzc2V0X3Byb3ZpZGVfc2ltdWxhdGlvbg5nZXRfc3BvdF9wcmljZQptdWxfYnlfdTY0F2dldF9zcG90X3ByaWNlX2J5X2Rlbm9tJmdldF9zd2FwX2ZlZV9yYXRlX2Zyb21fY29uZmlnX3Jlc3BvbnNlE2dldF9zd2FwX3NpbXVsYXRpb24cZ2V0X3N3YXBfc2ltdWxhdGlvbl9ieV9kZW5vbR1nZXRfc3dhcF9zaW11bGF0aW9uX2dpdmVuX291dBlzd2FwX3NpbXVsYXRpb25fZ2l2ZW5fb3V0JmdldF9zd2FwX3NpbXVsYXRpb25fZ2l2ZW5fb3V0X2J5X2Rlbm9tGWdldF90aW1lc3RhbXBfZnJvbV93ZWlnaHQnZ2V0X3RvdGFsX3NoYXJlX2Zyb21fcG9vbF9pbmZvX3Jlc3BvbnNlCmRpdl9ieV91NjQlZ2V0X3dlaWdodF9hZnRlcl9mcm9tX2NvbmZpZ19yZXNwb25zZSZnZXRfd2VpZ2h0X2JlZm9yZV9mcm9tX2NvbmZpZ19yZXNwb25zZQJsbgJnZQR6ZXJvB2JpZ3VpbnQIZnJvbV91NjQHQmlnVWludAtmcm9tX3NjYWxlZANtdWwHYmFsYW5jZQ1wb29sX21ldGFkYXRhB2lzX3plcm8CbHQEbWludCFwcm92aWRlX2xpcXVpZGl0eV9mcm9tX2NvaW5fc3RvcmUYcHJvdmlkZV9saXF1aWRpdHlfc2NyaXB0EHJlcGF5X2ZsYXNoX3N3YXAec2luZ2xlX2Fzc2V0X3Byb3ZpZGVfbGlxdWlkaXR5JXNpbmdsZV9hc3NldF9wcm92aWRlX2xpcXVpZGl0eV9zY3JpcHQLc3dhcF9zY3JpcHQMdHJ1bmNhdGVfdTY0HnVucGFja19jdXJyZW50X3dlaWdodF9yZXNwb25zZRR1bnBhY2tfcGFpcl9yZXNwb25zZRR1cGRhdGVfc3dhcF9mZWVfcmF0ZQpib3Jyb3dfbXV0EndpdGhkcmF3X2xpcXVpZGl0eQ9mcm9tX3JhdGlvX3UxMjgEYnVybhl3aXRoZHJhd19saXF1aWRpdHlfc2NyaXB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCgIBAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUY29tcGlsYXRpb25fbWV0YWRhdGEJAAMyLjADMi4wE2luaXRpYTo6bWV0YWRhdGFfdjC8DhMCAAAAAAAAAA9FWkVST19MSVFVSURJVFkfQ2FuIG5vdCB3aXRoZHJhdyB6ZXJvIGxpcXVpZGl0eQMAAAAAAAAAC0VNSU5fUkVUVVJOLlJldHVybiBhbW91bnQgaXMgc21hbGxlciB0aGFuIHRoZSBgbWluX3JldHVybmAEAAAAAAAAAA5FTUlOX0xJUVVJRElUWUJSZXR1cm4gbGlxdWlkaXR5IGFtb3VudCBpcyBzbWFsbGVyIHRoYW4gdGhlIGBtaW5fbGlxdWlkaXR5X2Ftb3VudGAFAAAAAAAAAA1FTUlOX1dJVEhEUkFXWFJldHVybmluZyBjb2luIGFtb3VudCBvZiB0aGUgcmVzdWx0IG9mIHRoZSBsaXF1aWRpdHkgd2l0aGRyYXcgaXMgc21hbGxlciB0aGFuIG1pbiByZXR1cm4GAAAAAAAAABJFT1VUX09GX0JBU0VfUkFOR0UpQmFzZSBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiAwIDwgYmFzZSA8IDIHAAAAAAAAAA1FVU5BVVRIT1JJWkVEF09ubHkgY2hhaW4gY2FuIGV4ZWN1dGUuCAAAAAAAAAAbRU9VVF9PRl9TV0FQX0ZFRV9SQVRFX1JBTkdFKkZlZSByYXRlIG11c3QgYmUgc21hbGxlciB0aGFuIG1heCBmZWUgcmF0ZQkAAAAAAAAAEkVXRUlHSFRTX1RJTUVTVEFNUCdlbmQgdGltZSBtdXN0IGJlIGxhcmdlciB0aGFuIHN0YXJ0IHRpbWUKAAAAAAAAAApFQ09JTl9UWVBFFVdyb25nIGNvaW4gdHlwZSBnaXZlbgsAAAAAAAAADUVQUklDRV9JTVBBQ1QXRXhjZWVkIG1heCBwcmljZSBpbXBhY3QOAAAAAAAAABBFTEJQX05PVF9TVEFSVEVEJExCUCBpcyBub3Qgc3RhcnRlZCwgY2FuIG5vdCBzd2FwIHlldA8AAAAAAAAADkVMQlBfTk9UX0VOREVEI0xCUCBpcyBub3QgZW5kZWQsIG9ubHkgc3dhcCBhbGxvd2VkEAAAAAAAAAAPRUxCUF9TVEFSVF9USU1FL0xCUCBzdGFydCB0aW1lIG11c3QgYmUgbGFyZ2VyIHRoYW4gY3VycmVudCB0aW1lEQAAAAAAAAAMRVNUQVJUX0FGVEVSJ0FsbCBzdGFydF9hZnRlciBtdXN0IGJlIHByb3ZpZGVkIG9yIG5vdBMAAAAAAAAAD0VTQU1FX0NPSU5fVFlQRQAUAAAAAAAAAA9FWkVST19BTU9VTlRfSU4xWmVybyBhbW91bnQgaW4gdGhlIHN3YXAgc2ltdWxhdGlvbiBpcyBub3QgYWxsb3dlZBUAAAAAAAAAEEVJTlZBTElEX1dFSUdIVFMXV2VpZ2h0cyBzdW0gbXVzdCBiZSAxLjAWAAAAAAAAAAxFUE9PTF9MT0NLRUQcUG9vbCBpcyBsb2NrZWQgYnkgZmxhc2ggc3dhcBcAAAAAAAAAG0VGQUlMRURfVE9fUkVQQVlfRkxBU0hfU1dBUDhGYWlsZWQgdG8gcmVwYXkgZmxhc2ggc3dhcCBkdWUgdG8gaW5jb3JyZWN0IHJlcGF5IGFtb3VudAcJU3dhcEV2ZW50AQQADFByb3ZpZGVFdmVudAEEAA1XaXRoZHJhd0V2ZW50AQQADkZsYXNoU3dhcEV2ZW50AQQAD0NyZWF0ZVBhaXJFdmVudAEEABJTd2FwRmVlVXBkYXRlRXZlbnQBBAAXU2luZ2xlQXNzZXRQcm92aWRlRXZlbnQBBAAUCWdldF9wYWlycwEBAApnZXRfY29uZmlnAQEADWdldF9hbGxfcGFpcnMBAQANZ2V0X3Bvb2xfaW5mbwEBAA5nZXRfcGFpcl9kZW5vbQEBAA5nZXRfc3BvdF9wcmljZQEBABFnZXRfcGFpcl9tZXRhZGF0YQEBABJnZXRfY3VycmVudF93ZWlnaHQBAQATZ2V0X2NvbmZpZ19ieV9kZW5vbQEBABNnZXRfc3dhcF9zaW11bGF0aW9uAQEAFmdldF9hbGxfcGFpcnNfYnlfZGVub20BAQAWZ2V0X3Bvb2xfaW5mb19ieV9kZW5vbQEBABZnZXRfcHJvdmlkZV9zaW11bGF0aW9uAQEAF2dldF9zcG90X3ByaWNlX2J5X2Rlbm9tAQEAG2dldF9jdXJyZW50X3dlaWdodF9ieV9kZW5vbQEBABxnZXRfc3dhcF9zaW11bGF0aW9uX2J5X2Rlbm9tAQEAHGdldF9zd2FwX3NpbXVsYXRpb25fd2l0aF9mZWUBAQAdZ2V0X3N3YXBfc2ltdWxhdGlvbl9naXZlbl9vdXQBAQAjZ2V0X3NpbmdsZV9hc3NldF9wcm92aWRlX3NpbXVsYXRpb24BAQAmZ2V0X3N3YXBfc2ltdWxhdGlvbl9naXZlbl9vdXRfYnlfZGVub20BAQAAAgICCwECCAIIAwcDBAIGCQUKBQsFDAMNAw4DBQIDEAgGEwgHFQgICQIDGAgKGwgLHQgMDQICGwgLHQgMDgIFCQUKBQsFGwgLHQgMDwICIwgMJAgMEAIGJgUnBQsFKAMpAyoDEQICLAMtAxICAS8FEwIFCQgUCggUCwgUGwgLHQgMFQICNAgUNQgUAgIDCQUKBQsFFgICNwsXAQgYOwsXAQgYAwIFCQUKBQsFGwgLHQgMGQICPQsXAQgaPwsXAQgaGwIDDAMNA0EEHAIGCQUKBQsFDAMNAw4DHQIHCQUKBQsFRAVFAyoDDgMeAgYmBScFCwUoAykDKgMfAgQJBQoFCwUdCAwgAgNJ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", - // json.move - "oRzrCwcAAAoLAQAGAgYWAxxKBGYIBW57B+kBswEInAMgELwDHwrbAxYM8QObAw2MBwgAAAAJAAsAAQMAAAQDAAAGAwABCAcAAgoHAQAAAAcAAQECAQEMAwQAAQINAgEBAAEADgcGAQIBAg8GAQEAAQAQCQoAAQERBwsAAQASDQcBAgEAEw0LAQIBABQOAgECAQAVEAYBAgECBgMGBAYHBgIGCAEIAwELBAEJAAABBggDAQYKAgEIAAEJAAEKAgkGCgIGCggAAQMDAwYIAAYIAAMBBggBAQoIAwEIAwgGCggACggDAwMGCAAGCAADCggDAQYJAAMHCAEIAwYJAAwGCgIGCggAAQMDAwYIAAYIAAMKAgcIAAcKAgEIAgRqc29uB0VsZW1lbnQDa2V5BXZhbHVlCkpTT05PYmplY3QFZWxlbXMJSlNPTlZhbHVlCGdldF9lbGVtBlN0cmluZwZzdHJpbmcGT3B0aW9uBm9wdGlvbgVieXRlcwRub25lCXVubWFyc2hhbARzb21lBGtleXMEdXRmOAdtYXJzaGFsEW1hcnNoYWxfdG9fc3RyaW5nCHNldF9lbGVtFHVubWFyc2hhbF9qc29uX3ZhbHVlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUY29tcGlsYXRpb25fbWV0YWRhdGEJAAMyLjADMi4wAAICAgoCAwoCAQIBBQoIAAICAQMKAgABAAAIPw4BEQEMAgoAEAAMAwkMBAYAAAAAAAAAAAwFBgAAAAAAAAAADAYKA0EFDAcKBgoHIwQqCgMKBkIFEAEUCgIUIQQlCwIBCwMBCAwECwYMBQUwCwYGAQAAAAAAAAAWDAYFLwsCAQsDAQUwBQ8LBAM2CwABOAACCwAQAAsFQgUQAhQ4ATgCAgUBAAAMIwsAEAAMAUALAAAAAAAAAAAMAgYAAAAAAAAAAAwDCgFBBQwECgMKBCMEHQoBCgNCBQwFDQILBRABFBEGRAsLAwYBAAAAAAAAABYMAwUgCwEBBSEFCgsCAgcBAgAIAQIACQEAAA9GDgERAQwDCgAQAAwECQwFBgAAAAAAAAAADAYGAAAAAAAAAAAMBwoEQQUMCAoHCggjBCgKBAoHQgUQARQKAxQhBCMLBAEIDAULBwwGBSwLBwYBAAAAAAAAABYMBwUrCwQBBSwFDwsFAzcLAA8ACwMUCwI4AxIARAUFRQsDAQsADwALBkMFCwI4AwwMDwIMDgsMCw4VAgMBAgAKAQAAAgUOABADFDgBAgEAAAAAAQIAAA==", - // bech32.move - "oRzrCwcAAAoIAQAEAgQEAwgMBRQIBxwjCD8gEF8fDH4IAAAAAwECBwAAAQABAAEABAEAAAEBCAACCAAKAgZiZWNoMzIGZGVjb2RlBlN0cmluZwZzdHJpbmcGZW5jb2RlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUY29tcGlsYXRpb25fbWV0YWRhdGEJAAMyLjADMi4wAAECAAEBAgAA", - // hash.move - "oRzrCwcAAAoHAQACAwISBRQDBxchCDggEFgfDHcMAAAAAQAAAAEAAgAAAAEAAwAAAAEBCgIEaGFzaAlyaXBlbWQxNjAIc2hhMl8yNTYIc2hhM18yNTYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRjb21waWxhdGlvbl9tZXRhZGF0YQkAAzIuMAMyLjAAAQIAAQECAAIBAgAA", + codesBz, err := vmprecompile.ReadStdlib("object_code_deployment.move", "coin.move", "dex.move", "json.move", "bech32.move", "hash.move") + if err != nil { + return nil, err } - - modules := make([]vmtypes.Module, len(codes)) - for i, code := range codes { - codeBz, err := base64.StdEncoding.DecodeString(code) - if err != nil { - return nil, sdkerrors.Wrap(err, "failed to decode module code") - } - + modules := make([]vmtypes.Module, len(codesBz)) + for i, codeBz := range codesBz { modules[i] = vmtypes.NewModule(codeBz) }