From f7d389e21c16c2f6f3d096645c93a302b2238f05 Mon Sep 17 00:00:00 2001 From: Shahin Safaraliyev Date: Mon, 5 Oct 2026 16:38:29 +0400 Subject: [PATCH] feat: bind validator PoP to chainId and registrant address Co-Authored-By: Claude Opus 5.5 --- crypto/address.go | 11 + crypto/builder.go | 8 +- crypto/builder_test.go | 7 +- crypto/fixtures.go | 2 + crypto/fixtures/bls_multi_lang.json | 516 +++++++++++------- .../transactions/validator_registration.json | 10 +- .../transactions/validator_update.json | 10 +- crypto/proof_of_possession.go | 23 +- crypto/proof_of_possession_test.go | 58 +- crypto/transaction_data_encoder.go | 8 +- crypto/transaction_data_encoder_test.go | 4 +- 11 files changed, 415 insertions(+), 242 deletions(-) diff --git a/crypto/address.go b/crypto/address.go index ff25dba..1323d06 100644 --- a/crypto/address.go +++ b/crypto/address.go @@ -55,3 +55,14 @@ func ValidateAddress(address string) (bool, error) { _, err := AddressToBytes(address) return err == nil, err } + +func isChecksumValidAddress(address string) bool { + if _, err := AddressToBytes(address); err != nil { + return false + } + body := address[2:] + if body == strings.ToLower(body) || body == strings.ToUpper(body) { + return true + } + return body == EIP55Checksum(body) +} diff --git a/crypto/builder.go b/crypto/builder.go index dd07914..94f5f49 100644 --- a/crypto/builder.go +++ b/crypto/builder.go @@ -56,8 +56,8 @@ func BuildUnvote() *Transaction { return transaction } -func BuildValidatorRegistration(validatorPassphrase string, stake *big.Int) (*Transaction, error) { - pop, err := FromMnemonic(validatorPassphrase) +func BuildValidatorRegistration(validatorPassphrase string, registrantAddress string, stake *big.Int) (*Transaction, error) { + pop, err := FromMnemonic(validatorPassphrase, registrantAddress) if err != nil { return nil, err } @@ -72,8 +72,8 @@ func BuildValidatorRegistration(validatorPassphrase string, stake *big.Int) (*Tr return transaction, nil } -func BuildValidatorUpdate(validatorPassphrase string) (*Transaction, error) { - pop, err := FromMnemonic(validatorPassphrase) +func BuildValidatorUpdate(validatorPassphrase string, registrantAddress string) (*Transaction, error) { + pop, err := FromMnemonic(validatorPassphrase, registrantAddress) if err != nil { return nil, err } diff --git a/crypto/builder_test.go b/crypto/builder_test.go index 8cdafcb..ef08e10 100644 --- a/crypto/builder_test.go +++ b/crypto/builder_test.go @@ -79,15 +79,16 @@ func TestBuildUnvoteRoundTrip(t *testing.T) { const ( validatorPassphraseFixture = "gold favorite math anchor detect march purpose such sausage crucial reform novel connect misery update episode invite salute barely garbage exclude winner visa cruise" + validatorRegistrantFixture = "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd" validatorPassphraseFixturePublicKey = "a18dba7811b212bbb2f080d7c69935998ffbe7b38586e2d3e9e12079ea789996d1c69feb158c002aed327f69865be496" - validatorPassphraseFixtureProofOfPossession = "a124539f9d469919eb57224cc003d9d5b086a27c6de244abf60b74b35fb749fceab7f4c24b983475cddab7d0876de49c000b5c362f5e3ce18d964f5c2d20d4eadcf7cb77a73d8ee4cd87bad10f7ba0824cea6715d1c045b4f93865a2758b7bfe" + validatorPassphraseFixtureProofOfPossession = "8dff1b303bfacacb2eb716892b79123b256314d8fc91635aae307f0fd7faf58019bba25c494b38eb1adccd91f49923ef00e39947932d7edffe710c48b9ab61ad4a9bd48f41f9babcfdd5c88bf3ad74c4d70d091a407310297b1dc4bc84ec6d5f" ) func TestBuildValidatorRegistrationRoundTrip(t *testing.T) { assert := assert.New(t) require := require.New(t) - transaction, err := BuildValidatorRegistration(validatorPassphraseFixture, big.NewInt(2_500_000_000)) + transaction, err := BuildValidatorRegistration(validatorPassphraseFixture, validatorRegistrantFixture, big.NewInt(2_500_000_000)) require.NoError(err) assert.Equal(validatorPassphraseFixturePublicKey, transaction.ValidatorPublicKey) @@ -106,7 +107,7 @@ func TestBuildValidatorUpdateRoundTrip(t *testing.T) { assert := assert.New(t) require := require.New(t) - transaction, err := BuildValidatorUpdate(validatorPassphraseFixture) + transaction, err := BuildValidatorUpdate(validatorPassphraseFixture, validatorRegistrantFixture) require.NoError(err) assert.Equal(validatorPassphraseFixturePublicKey, transaction.ValidatorPublicKey) diff --git a/crypto/fixtures.go b/crypto/fixtures.go index 5a0ceb4..9f9b2e0 100644 --- a/crypto/fixtures.go +++ b/crypto/fixtures.go @@ -130,6 +130,8 @@ type TestingTransactionFixture struct { type BLSMultiLangKeyFixture struct { Mnemonic string `json:"mnemonic"` + Address string `json:"address"` + ChainId int `json:"chainId"` ValidatorPrivateKey string `json:"validatorPrivateKey"` ValidatorPublicKey string `json:"validatorPublicKey"` ValidatorPop string `json:"validatorPop"` diff --git a/crypto/fixtures/bls_multi_lang.json b/crypto/fixtures/bls_multi_lang.json index 7c97867..f38df36 100644 --- a/crypto/fixtures/bls_multi_lang.json +++ b/crypto/fixtures/bls_multi_lang.json @@ -1,322 +1,422 @@ { "czech": [ { - "mnemonic": "najisto kazivost vpravo namluvit exkurze lord hladovka svoboda obejmout ukazatel pustina srpen metr ohrozit autobus pobyt omeleta bledule cizost petrolej nikl celkem jelen poezie", - "validatorPrivateKey": "6521a909bed1652044b99809b0a3c6999a9bd3a9c760e27e30fbda5931fa76a5", - "validatorPublicKey": "0x86e47e024116003fcf4a6b9150de36964d6590eb11b0f4a1607b89e11d99a4f8609e234eb8185ecf2c77edade1c95309", - "validatorPop": "0xae1f97166e6e444101184825116f03d1607d4387fcd3c0bc71c4a3d125858a8f236d948cab97c6bc1f9f8b6c487ed8f31439ec47e16321e090989bd20b9a4bab069a807935b2c141c221a04422a8ebe2fe84da839fc10dd665db170e24692069" - }, - { - "mnemonic": "louskat seshora hledat zahrada buvol vyrazit opravdu munice strom vyhledat barva vyrazit prorok lord manko hojnost zmizet dovozce lidojed bojovat nikdy hodiny spousta manko", - "validatorPrivateKey": "43aafbb031406eec46f79604a5615806c0880e0d8b2d6e722f03d7eba86db4e6", - "validatorPublicKey": "0x875032037e45a884e58629825c57d9e381e45ed0df3250b324aaf767fbc5a47a69a06a89af8998ed90a5c061e4cfbe20", - "validatorPop": "0xb4d356027006865734b10e05d4b943f3cde3628ca9763f719434a8d99e6f3ce5fae367c9806bfb7e9cdd5784f1b89afc160828fa4ff74ad0496453b7a83dfebf657ac016e601454146458c88fb7b4a5f123d18677f4200cdfa83eb63eee9100a" - }, - { - "mnemonic": "pastelka makak panna boubel pazourek zimnice louka prodej videohra chrlit referent smrk bulva varan smilstvo spis vztah potvora postava astma vystavit rampouch odpor duha", - "validatorPrivateKey": "3f941bba361aa5273e560cd4de20e747586e430efcb27fe14556f442808a477b", - "validatorPublicKey": "0x9684cc2ca48aca7f5827d1bdc33c1e6c8986c390309855221be1a74695986f9d7a9f8fa56e86027ab3e332b6f2a7a34e", - "validatorPop": "0x84b871933fe3a610000e581aa3d77c4d168ebc64691cf7ac702541b4eab54b5d0ac790c73e7675e52535274734a5e71b11f2bb16dcc8d366575450bedef56e32e1d4cf584f2795cdb2d4ea773a8931db739905ef91c5bb9db85a63848d3a23cf" - }, - { - "mnemonic": "dort okno zajatec tykev komando mlha lucifer astma malina puklina tendence starosta bacil baret mobil odjet propad zjemnit obava petrolej mezera baculka piha hadr", - "validatorPrivateKey": "3f09d1651e7a6d1d5f869db241fc94e578b1f3926977985ac96206225e047a3a", - "validatorPublicKey": "0xa774065223115fda52052087df0e792a17ba5ae3a1dddddafcd06c347f5905ac9dba5873e24df920c772d9ebe6a1548c", - "validatorPop": "0x8dda28ddf6c5589afc42c6cd3cf497e4f6da95343fafb1278154350338528cc624a3389bcc612bc7ecdc6a7fb2c6f4d511a3904170e4ca9fc371949fdbdbec3186dde06fc18644ba41c758a79f3aa4a55c544f550d56799d5f37434a71f21b4b" - }, - { - "mnemonic": "levitace truhlice otop ledvina buchta hala madlo jinoch doplnit baterka podzim dareba sluha cejn objasnit zastavit meditace mezera ulovit osten znalost exkurze plivat lucifer", - "validatorPrivateKey": "48bf069ca2917eeeee612e6fd50a1f6fb2c28af9167ee04cdd03c21240336d6d", - "validatorPublicKey": "0x858055545004fc6ef228bb4f23e2db530949d606f5e91620752a92d330dd59ef455bcb4214a64817adeb543aa2ea1287", - "validatorPop": "0xa79748c76577bf84f7ad4003c432bf69896cebcce9da6ba1802025d037b2622db015ba297d34b9677255baafe29b31560acb47d606105a8245c71dbcaefe1bcec10c75995b293d86c1ec72b2dd552ef153e8da890a952908ba0a14628cfdce88" + "mnemonic": "omeleta sekta kopnout stvol pecka penalta okrasa balonek obvinit ulita trest terapie pevnina zeptat expedice periskop majitel pianista sazenice letokruh zmodrat holka riskovat roztok", + "address": "0x434e5F0795A77f3221373560e69dFE5D8BEA8146", + "chainId": 11812, + "validatorPrivateKey": "11fab985bb334a4310e980a61aa88a6d57373a6f46bfb9fe3042d1c0689ddcf2", + "validatorPublicKey": "0x8000f9c50c86215314916a65c058eef2512e05d1e681f303d2a00b145c781f9b68209228a45b9acfc01738b6373f567c", + "validatorPop": "0xb35e4b5ddc82d7cec81ff553ffc9396385363a4686d46dd7aaca919a518aa51a443a29b5d0f8adb9b05cf9cb652d72a311e127e59ba5a28ea758fc7fb756d8965fb2b23791134b61397517ea7966dcd862daac38ab0063465f2fec2850772668" + }, + { + "mnemonic": "losos modelka kravata novota jiskra sekera zlehka chirurg samota obloha naprosto konina pudl jinak vzadu zrnitost etiketa kujnost bedna mosaz pacient kozoroh kauza obrazec", + "address": "0x1f9F84ecCb6E34FBB79f9F2b66F9849cad5603A9", + "chainId": 11812, + "validatorPrivateKey": "0877bf628f04c94b8f5116c21c88d15ec4c2867d9b6cb4d312fead5e7209df5e", + "validatorPublicKey": "0xa824e8e7f73b7d67981d8ff96a0efa5fb0b526504a3884f1b31a9979bbf31ce5ea5d6ea167426dd8dfe3a29ec0ef3c6c", + "validatorPop": "0xae3e27db77b96e3a5b8543fd9f0793db055ca9c5e26f35e1380b4acf4a4e61683ea2e2c5a7173ede8124c97f3a8bf57d0cd7bfb0d911ed5acaa18da4902be3f308d19fbc23b548d64796ab3a9a4961601c68562d043a9a6807864a76b701bced" + }, + { + "mnemonic": "krmelec agrese raft zlost napevno krasopis bufet leckdy postava malina sesuv hoblina koncept panika teplota prosba letokruh sokol utonout truhlice fukar zkoumat zrzavost vymizet", + "address": "0x5a88A434b0322D15bB0647c64ADa9E37039E44bF", + "chainId": 11812, + "validatorPrivateKey": "71bfbbe92be0e67bd4ea5058a2286b85fde1729c71b7320b316ff7cf87e5dc5b", + "validatorPublicKey": "0x89116d49fa0eef7efd12a88f610c28f839889e38c8231543371e909845d57c60444dcb38aca418978865fdc8cb482197", + "validatorPop": "0x91dda4ba6c525761fb126109c926ece89179255ebb4fb5919aee9f47a7cd7c9e9e3d127d62c9abf3430b23af0a17d31210fa16a0a2cc999052692e17909ba6214cc819a6d335a707b27b8c48fe997f7cec834668709aad127906f138601b6155" + }, + { + "mnemonic": "sesadit nasekat zlato riskovat burza servis iluze vymezit nuda hrubost baletka decibel povrch tramp bizon kytice mravenec smrtka exkurze hmyz lomcovat mahagon sluch tiskopis", + "address": "0xf483E2780318F3f4C46C0e4044a886dd2527d8aA", + "chainId": 11812, + "validatorPrivateKey": "4461af9bce9d7260ccafcf57c1a2e6a0b6a916b5e00281be441da220d674e9a3", + "validatorPublicKey": "0xa863abfae4bb6b00a8709abd0ff17998036c6066556cf1ac61afee1e4bb3f7a5092050e67b4c3ec5b39955bea761de12", + "validatorPop": "0x990ce291d6fdc3f2b3ea76bb9f98bf87f6e964d2a89151d33e2225b64eecc6442084d50a674b021651fed6d095231720059b9708dfddd83c0dc58d95129d66bc77eee0695a3b0c699a52d03abd0569abca1c4607af5ed6171f2220476e3be0b1" + }, + { + "mnemonic": "mzda vyjasnit odplout vypadat cyklista figurant doklad buchta smrtka vandal odvolat truchlit korzet mandle vypustit bubnovat mazlit minibar dojnice sasanka majorita upoutat podcenit pobyt", + "address": "0xb5989b010Bc46E60De927f2271d83bbdE0d80479", + "chainId": 11812, + "validatorPrivateKey": "12968d26e3dcca50d96634440e05931eeef5d45749ea96da674bb27f84f4abd9", + "validatorPublicKey": "0x92018f5c2add62894d6c99ab57150b0d7a66522be61a9300b579c5d297133ad300e3e5113407abf299824c27a501c685", + "validatorPop": "0xa730d7f39738839ba28883b28255b689e624e71364b5037c3da9dc2699d14e38e341ba1323c9e647e1f70b023f5f13e7085ee2c14ad0a5ca50d143026bab7ed43dca169f631c0ea23129524439353c2a6a137018ba8e3179076f8e11cb0272cf" } ], "chinese_simplified": [ { - "mnemonic": "法 何 又 莫 策 崇 须 裁 牲 者 阳 内 勇 逻 业 规 爆 院 葡 的 疑 传 面 运", - "validatorPrivateKey": "3f8e1457866e218d380add85494fddd6ae348e5cdae18b41394921e33baaad71", - "validatorPublicKey": "0xa5d586adc473d892ba361823b4a37380da77d1b9e4f44af76550a19270b88fefd4cf6bc1fefeb6d57b65b0d979facc0d", - "validatorPop": "0xb87264f324798a225770fc5a25189edaec7e048d686c068051717da80b7b4f35816473ef122612b090b473087f0d1d320208561ed58c2b2b421404fa4e1da101effbe174e3de1faaa780bac43c8c7919d806bcae56daf4022a221c05b1b24949" + "mnemonic": "循 熔 存 块 伸 牛 课 铃 孩 涨 户 驻 达 专 荣 校 候 英 提 论 羽 块 寄 溶", + "address": "0xFE5b8Da4762566982673219D64e535798B1E0bc4", + "chainId": 11812, + "validatorPrivateKey": "124fe71b40ee0b44b0371480f3da63520ddc66f9d1925c128ddd62d4871911d8", + "validatorPublicKey": "0xa882b16b04573e22eba614fdb368b11cbcb7a73c78116b89442f5accb9c42357e2ebb90b436f52c8e0a80cca0729b8aa", + "validatorPop": "0xb1ff989d49cef9da2f07d0e2e0c38cead2182fd2f5ac7214a1d005cf759d6984984413bee8ad1b3dd513259fa8e90eb50202c79121085bdd9f84d18a9190700ae84108e31251491f1eeeec14262ce35ef4f0d0e2815e321e97e1e2d05102a86a" }, { - "mnemonic": "脚 哩 衡 片 阁 窗 众 辽 预 韩 普 腐 辅 惨 无 日 氨 罐 方 羊 齐 准 尚 纹", - "validatorPrivateKey": "024404c9af88605fbb2ec501d1406a55e087d57d4d0f92e9292ebd88183a472e", - "validatorPublicKey": "0x8ba06b7f5a72a2a11f6b314e3575b4924838e613cccc5d9583c92a9707d19ada047ca241e4307655be7e22669ac95c56", - "validatorPop": "0x8d32cbb32984ec2a67f16bbd4a6059052c6bd68a1a1541ee06427dc01544f5916c8799984c408f5e52661b31e3c79c910eec0d580a00ba87b1ca1028ea2c59b5396a867ec18d9dd8e0d06d925019e4376fb78f57c124869085f22eb224f3846b" + "mnemonic": "死 斥 更 允 误 宽 奋 损 相 买 者 母 默 唱 障 绝 断 宋 杯 歪 吗 件 舍 雨", + "address": "0x07fc6db21443564D64028311DCbE40a0B754b692", + "chainId": 11812, + "validatorPrivateKey": "5ef18ba3a547f1e14b4050a6b28e64a41e9488184b3ae71b2127bfdd0db5bfc5", + "validatorPublicKey": "0xb049f63ea6d69eb02c2829d5e63f25dbdabc1cb9ceb1ea4f9831cdfd76418a25b756584cd7ee935311701457d4a8c655", + "validatorPop": "0xac5c4dd8a939ec582752049bf61a2484feceb4d4361f03d309636f7c0d30f98347f570b51eb71e0b4abc353ab0cb72dd17107b4445209a208e0d12af7b18ace34bbb5c61898a3c2a510a9edbc8c23d8cf22a44081cf0791178929331aec9032f" }, { - "mnemonic": "萄 丝 鲁 剥 稍 礼 妥 湘 役 曲 洲 欲 岗 端 速 邓 逻 团 又 磁 内 烦 寿 闲", - "validatorPrivateKey": "35219fbe53eda1b8745d7c59464f3d3c43f47d0bb48d2343bea4cd76b782ab51", - "validatorPublicKey": "0x936ce7f333977bcb0895374a5f286832575be4f57a4a624614024cc5167d3b7eee4844b9eb927cdd0d0d89aa30e27837", - "validatorPop": "0xa95043477e03abac2e23aa360b2bda57f3d32f1ea7fbcb62be5e0a6d1a504731be10a07449d08452110c553de4d5746510afdebf224955537a65d39f0dbf203303b9786c122c9c246e07a8e11f1df881819bb79990c0af8f60f22c5974dcfc2b" + "mnemonic": "弄 章 雕 端 本 种 摆 产 炭 仪 味 米 径 习 轴 熙 腹 遗 统 纹 血 彼 竹 矿", + "address": "0xa1448B9D92733f1CC8C6056215E83B6CC4470B3F", + "chainId": 11812, + "validatorPrivateKey": "58c8b0b142dd88b388f4845ecfdc1f29249a2b7bce3e1989c31aa56454ed3d30", + "validatorPublicKey": "0x8ac5ba4236c6223fece6c8b02bb22328b7c65d11046a28a07ff3d416de352decc547faa0fdd3e6262caed4b98de0b34b", + "validatorPop": "0xacba24b2d42022b95b093ec8c64b812d9b48fd01f87297eb02e561c3d09737ded906f74050e9468db0f67bcfefd2637519ba8f2b75082f3d33387f04ed798a615248d87fbd3015dd2e89ae62201195db214e6f57d62be625edcf64b05611d25d" }, { - "mnemonic": "谋 死 只 版 韩 睡 释 逐 凤 知 春 氯 足 滩 蜡 整 叹 丰 沙 游 填 核 屋 砂", - "validatorPrivateKey": "133c8941693353846ddacdc1bf25a2425797ae75cf05a5cc641df97cf09e0ce3", - "validatorPublicKey": "0x8bf91fdd97b7e318ffa40a9554eef55101c2af60ce3e9a82cc0a5a5349b73b45293fd8fb4c5c1b038230bfd8eda17af6", - "validatorPop": "0xb3660b201bcb7c631b08beeef26ab9c5150528446a9bca206b31a5d0ad5a62c0321cbd4fb140624312ebc1785df7bd2616875e2ba1e285b6129420aa0ce4459dd74b6bee51e8f8f048736a407b006256d23e1371b81c66566ddfd8ba6bb5bed8" + "mnemonic": "液 钠 形 资 埃 林 灭 座 塑 冬 醒 签 继 剂 勾 罢 过 乏 秩 似 辨 悉 接 一", + "address": "0x723a8d8691ED350e1859B42ba9dD0deF00e3Cf35", + "chainId": 11812, + "validatorPrivateKey": "564baabce0dfdbd46a3635e26fdf5ec3836345467aea3d462f82b64a1fb0b9bb", + "validatorPublicKey": "0xb897d3aa7a96576fe535a88df4e70ef5ed8621e22a052d95f20a90719f936d9a8f330e1250ad7c1b388965281da0e204", + "validatorPop": "0x8bda0f2951546e7e2c2ab7a37479959d82853aa952a17b255e73bf99d55bbc50ba69fe3d783123da5736eac62e3a860a177f8baf38512a6edbcd2eaab363abbc8850d50713ad3755e09224f04241cf0f859becde88bed403f001b989b72fa5f1" }, { - "mnemonic": "颜 郎 情 冬 煤 既 库 绝 汁 元 泽 涉 嘛 票 风 筛 隆 突 滴 神 临 壮 爷 晶", - "validatorPrivateKey": "1c7e0331a7d2a695a1603a85ed2844a9270a53001f4095d30295f612cd2c2628", - "validatorPublicKey": "0xa497a5851a04f16167587807a3f2e9ea4764ecda9b434e041b4c1086466370e99f88754c429359b5e8f3f9fcf3727e86", - "validatorPop": "0x8874968b524621ccc090d595481eae97b9e5ec2404d4fa50466565c27d8b9b130ec38c12881898c1713bcf93a1ea50740378c70bacf49fdfadcd9172a0ccc4256baa2a9fc12b37c9330a2fa5c283f59f4860f726244bc2749db32e81273e3966" + "mnemonic": "安 变 优 软 残 拨 舰 丘 呈 咨 薄 柯 总 您 办 泪 如 泽 三 碧 伯 译 轮 减", + "address": "0xCa3A12B2B4872385E3afA5e08db8AD3f5ae00626", + "chainId": 11812, + "validatorPrivateKey": "53b9bbcf29f94c43725b1c4db9d1b4cd28e634abae0edd136fffeeebf2bdd387", + "validatorPublicKey": "0x97ca5f55a404b34a60acc1e37fd8e1d3b9ef6b9248591f44aa44856f9e5f8b13eb330c119d128a326607ceb06bcf7bf8", + "validatorPop": "0xb176b81dc1041a92d80a8e89e2d06fda7d204520c39aa13ecc071d690861d8093a720cf8eee9d4756577dc8c6525d7e31741beb2b049571e592ec0f41bc8a04186940ac7adb8d2c87284ea26ce0460584fd5c06e67783171386502102ed6005b" } ], "chinese_traditional": [ { - "mnemonic": "銷 鑽 隔 責 雅 丁 來 旋 爐 轉 害 睡 狂 太 善 馮 集 籌 蓮 爐 懸 生 試 盜", - "validatorPrivateKey": "0602d2cfb5a77b14aa98a996242583148f14ee8043b50cf8cece083a81cc0221", - "validatorPublicKey": "0x96cec279ae8aaad8d78f7367532b864d17b129bf3e9019a5581427f10812f32911eb3e3c795eb4bfcfd58d85b6dabdbd", - "validatorPop": "0xa08fc77623fe2aa660cb6f16a6c211313bb85ac9a355af579fd9e252cfa26abddf7d112d823a0aded9916a2bf38db83e1752d34f6fb653e8847a3ddd8b075dcb864eb88d09e0c429c35157501672d15ec5dc274fdd2ff6da216d28f271a11bc2" + "mnemonic": "藏 排 袋 尋 街 級 鬥 炮 掘 放 絡 盈 籠 造 奮 擬 飄 原 創 江 告 船 傷 遭", + "address": "0xB803964F74BD4c07B138B06B1029144632C47C44", + "chainId": 11812, + "validatorPrivateKey": "14d2360d01cf4e3c3453664c9eed7c6750560627bc7c2a6bb50ac55dbeace6c7", + "validatorPublicKey": "0xb68e488c76167b80675650776a548782fa73cf4cb10cec6a00acb86c1eb5df9de1281baf4b18ec0b0860fa37674256d2", + "validatorPop": "0x8e6b6b419b7b70faafaae0133e768c04eb0874bbe62c4e50cf55ba0489c1558daeb384b6447cc59bd04966f255831f511868d75a13fa1dd0dcbc054248d8cd0782c20ebede1b212da46adc6bf7effd1b6c620c52539dfe3e6fce74cbd3c40ea0" }, { - "mnemonic": "序 付 撞 盆 憶 汗 幕 懲 會 氏 殿 忍 皺 累 躺 酯 全 陸 起 拜 芳 闊 舊 耐", - "validatorPrivateKey": "55458f5510a4eaa27c354efb5e02d24e153af112e19c94c43d559f717cd7f617", - "validatorPublicKey": "0xb2ec5958b2ac4f7762e5c131187d39dddbcbeecc3d42cf29778eddf2073d3858e88ae74360973a869d8e3856708bc7b5", - "validatorPop": "0xa1bc5c22ee93bc49a60421faa3d81395005f94fb9cb42156aea21c2cb5eac2f12c39356565600cd559ed9e96d37dcad202eb93d1067a8cb08bd98868f4ed236805c2560a4bd7496ce2d5c2696f175e0cd1a1cd70b617ecf47b55cdfa161e8cab" + "mnemonic": "住 祖 洪 秘 徹 途 賴 固 始 睡 倡 托 璃 祥 盜 播 腐 雜 催 弧 味 結 操 倆", + "address": "0xC8127d2a1d5aEF6aa26C3479ba6d50C73ACdF1Fa", + "chainId": 11812, + "validatorPrivateKey": "704b87a479940945b34c19c182f1509d75e6d37233a585ea27e4e519c38dc21b", + "validatorPublicKey": "0xa9d6d9f638c49d2dedc0f429e32b30fa988f5610b05594bd4d116aa8e32a4e34b54c34f9d2b0e04fb1b876a462955c28", + "validatorPop": "0xa4556e2e222f77c3beaafd372d5a46660e3e706adbddaad616095043d56a937e3ba8c456e8849215e0307025ab80bc9213165b321f14b7685ebbadb610434ec21eca57c9205645698bdfcf3093d71c5e4539cb1a453b486b324138d6fba4f80d" }, { - "mnemonic": "很 造 衰 姿 整 慘 扇 代 糞 器 蘭 沒 其 啟 半 取 界 績 拍 太 慶 利 調 巧", - "validatorPrivateKey": "5c699b7e942eb59dc13fb39a4d704087de03daf9018b6b321f3818a668a8a3a7", - "validatorPublicKey": "0xa81d874c17a6ee136782c009414a06bfa2465943b30f450fd0a40e287fbc25617f28a5c5cf02b7b0e847aff8fe32edbf", - "validatorPop": "0x92e9fcc48841568ec6501093f88af0964cb0f716d90ce60c748ba4ecc2568cd091ce6fa640ebef0c97c81db9320586ab126681e58921eab1fff2688ff81e5bd51ef199892199e03a424fa1a842920ac161a01276702c2535675c080563c005f3" + "mnemonic": "肌 飄 鈴 例 狀 夠 直 際 勘 酷 遠 灰 健 熟 及 共 非 靠 牲 職 指 建 奪 園", + "address": "0x8B449491FC9cF851636A9E1311b775D203eB226E", + "chainId": 11812, + "validatorPrivateKey": "0ae3fc67b307f9c807a360b69259a1f0862935bdf89ca7f3bcd8b5bbcd23ffec", + "validatorPublicKey": "0xb11841578f8c235cc4b7777668005ca327827ee06c8570ffea0ede629d1b7558852f6f311d79589dc67c4ee3ca4e810b", + "validatorPop": "0xa95f4abd8d60d59fd30a5373b3ef9de81badecea68f2fa579f1acf7886b39bea49362f2d1871c76e61fba06de651f72a07d52f26f12a18aa3f8c35baafeabaa6a92bbf1934aad4fea281d62dfbeecd65abd209ebeacafc60d00ad2afec0903b1" }, { - "mnemonic": "砂 宗 哪 鬧 忙 討 播 胺 赤 朋 底 訪 僚 新 握 卵 曰 察 訂 尖 輯 恆 止 忘", - "validatorPrivateKey": "12d39f9a39757c7dd5be3bad73e3471962f548633de68df90f6d01a111670425", - "validatorPublicKey": "0x885a2e7c0bcac2c36ab54808056bb5ba924c35313d5363eb05af7f1fefb412bae5c905cf45522f3cb3fdf96a88e748a7", - "validatorPop": "0xab5d6fb58af1411574c34421a5bb99ac7811e8d2d7d35751ce531a92aabf020094e4beb322bf366914d615386d0cb542137472076cb1dbb85f6f3ca1157f11e19be6ae1a7d7b0097d627015bd94b0d3129b79697f0ae2179a5e16ddd8cad620c" + "mnemonic": "道 變 泥 低 於 撐 憑 嫂 脅 偽 湧 縮 廣 湖 實 版 召 籠 哥 彭 悄 覺 知 賓", + "address": "0x29ca5Db7c277f8Be1AB42E09997301378EbfBc0D", + "chainId": 11812, + "validatorPrivateKey": "5a6c321b88dee2a8bf52b3a9a18de35cf9d6edfba1c6513e0a2b51714aebc16d", + "validatorPublicKey": "0xb38c05873ad5b526f9e8b7031c3a1e132c6580a7ce5f5f5a49ced563e92b7c3ae3b5f6984ac6dac880b07e9f368ce18a", + "validatorPop": "0xa3fd466e93ccfe3e146a7c6e93e6706f23e4a256daedfda69f9911ecdfcaafd19a3ad4a42abc3573967908fc0fbb3ec806bcacfa06cee469e21bbfcf7ad4bbff4e425f16b7cc8d7cc6d3ba270ec52a71badb538358b87ee8833b423aef7d7a0c" }, { - "mnemonic": "少 割 宋 誰 潮 爺 稱 報 訊 遺 協 專 騰 恨 手 賴 誣 裂 素 洗 節 線 霍 含", - "validatorPrivateKey": "25624f9a90c7d545ba7a69fc74c82ea598ea4cb60b877814468d74b3efd10aff", - "validatorPublicKey": "0x8da1045c92f7bc2379017b20520fb9608f2c91de52c7727a3b1b7e882ee6859dcc113a645fcaf21b3f4d2f705edae7a5", - "validatorPop": "0x97768e349b4f81ddc46c569d83f0d8c549a19c171d8a25c5850fc5181e5801df39dbf547f81b6a23605ef1d43146568c0dc4ed7752b20ac551763ec0eee7765fff727f21acd4a2fd63e3270ff2f29fa651289343645511425bde1e5048cd3614" + "mnemonic": "敲 血 派 戰 輥 杭 熙 閱 鈣 蒼 很 親 恩 眉 眉 找 婆 肅 學 噴 棱 廷 患 晉", + "address": "0xD4f6A0718A901F44dA5983DFeD7f6A8f7793c53F", + "chainId": 11812, + "validatorPrivateKey": "467b0c124c1b49f63826e796dc5b1ecba60454561b6e983b5170386a8571d8f0", + "validatorPublicKey": "0xa393e4c33eb5f50968abdfb2ed7e5d1e46941b5c7869096d97bccead74076a621033c3a4859a280f0461faaf6aa3f87f", + "validatorPop": "0xa396b7f56548b44838bc1664a729dd6d58d82fcf60b6629697aa5a3a8001cb0276a8f96df81dc627e897b1f11629c28a07fcb3f5a0bd32ff6e30f414469f11b05581b4ae6e1b60860e9a2bad16071079e8c74dc56a84d770ecdca4d169ef50bb" } ], "korean": [ { - "mnemonic": "국왕 연설 혜택 호랑이 막걸리 이월 손길 말기 민주 해안 먹이 특징 여섯 가끔 증상 먹이 곡식 산책 본래 회전 잠자리 오염 매번 행동", - "validatorPrivateKey": "6f216814b1b9fcfe5b8185d5b517653e15e4d5ee754deaf4bff7b211063550d6", - "validatorPublicKey": "0xaeee5e065035c25b6266592bfc229178bdcb191deda7181127c9d29627c66a9b7fa3719e38baaefc0f531a053e70d206", - "validatorPop": "0x81ff1c7b3bb928a0b15122dd07b1399baf41609a00c323e55d72a67db9805ddea637b4bd6bfaf2184f532bdead2e7cdd0888d3b964473945adade0c9816701c699980755e42c313d834beccec56ee4c2e15427af92a9a4d1bb231d7273e0caa7" + "mnemonic": "냉방 실내 장소 김밥 부근 언덕 시선 올해 백색 명예 웃어른 강수량 심사 평가 대출 고장 구름 본부 법칙 가상 의논 나침반 지름길 공항", + "address": "0xEB55bCC89cB56333a8fa7b85DC00fcA9AD12010b", + "chainId": 11812, + "validatorPrivateKey": "48679df2e607fb5881e409a27ba7b9c02b233c0b041f6e0d7657e65766cbfa4e", + "validatorPublicKey": "0xb91a84761cdfda2b736f8406e2ceabbadf690d3eadc4d8f60cc2f8090ce942759e574f67bf87794a3d4684270a5d22aa", + "validatorPop": "0x968991245624f62f03fb62eefe116f65376abd846736b0330e557e3b8c65cd65110d508a1ce6db635e88bb0f4fc916d912aefa6291528eed0d66ae2447a210291dcb2b6d20a289eeedb7e42b87256d38272b860f301a20d2488a1d942e867593" }, { - "mnemonic": "소용 수염 대도시 매일 실시 강조 살짝 청년 시청 문화 열정 호남 염려 학기 감소 본질 선풍기 인연 고전 모퉁이 직장 심사 무척 약간", - "validatorPrivateKey": "3ca9d88bfb7ab349245fe2bb84c5afd4432644cfdae91721c971c7d5e527e1f4", - "validatorPublicKey": "0xa6ec74718fe6a26e9f2a9b2796afd35a1166a4af0d1abaab16934e15132ef470e30d2934d1bf5f7f5aca1310bdab9301", - "validatorPop": "0x8e11d01913d4eaee2e1b12b23a8cbb9acf77bf524c17fc4d65e7c97fb132e7757292bf0b8fadf9eae3ce381659f407d004766389f8e0a38f4c14fc0133983a9d98e4e2b6420bd3e30f7c1134c0a84ac86953297ebcb1c9db48ea113b4e76bc16" + "mnemonic": "당장 안동 평균 생활 쾌감 연애 손해 공업 책상 고춧가루 백화점 줄거리 중국 출판 콘서트 교과서 현실 활짝 올가을 불행 도덕 신용 학용품 노력", + "address": "0xeAC8F2eBfEBEE325ca0F0F4C3B9B0ab2a4e66884", + "chainId": 11812, + "validatorPrivateKey": "540c86653b9931f2cc761dd11e25a3f0a90a44bdd57c19fbc140091e19a78b8e", + "validatorPublicKey": "0x957bbad99767e0cd42146926525267cd19a06fb180e4a2ca10c06021409f9aa8d5e80542ae793422d1cd1bfda3b8a353", + "validatorPop": "0x924d66a21dcd8d608220388a4c31e4f8a9a32a0378e2593cb940b1219945d3b7ec2a26d1db4a19af7cc3925130b27ac50d466480b3a656381bde727434a6e756b08401844e1e51e438eafec3fa7d545d56142434333eb3fee42d0bf6dfecf929" }, { - "mnemonic": "스튜디오 감자 막상 튀김 자율 횟수 선풍기 약수 볶음 현대 손질 카메라 패션 살인 합격 이틀 여인 국수 국제 광경 수면 법률 성함 대출", - "validatorPrivateKey": "0813cdaac3b3caf757b9042b2d1a41c9056230319a104884f7380e1a31edeec8", - "validatorPublicKey": "0xa83902896fb8d0537a0f5336fbd458085724ce7c6cdb01eb4c12c937922ed8769a2064492075f834f96274d2b27dac90", - "validatorPop": "0xb2e530a339c934fc3825145b24df71870f1d1c6e5a4df3bace09001034f1691f8e8186bd6cbe49aaeb1f26a802e6304d124d4f2aa4bc0bc356ec4cd9a851c80e1470f743ce241d4b56908cc9421f15ca676f338308a4ad54f56ef4146a27a81c" + "mnemonic": "모금 실태 각자 무지개 특히 탁구 밥상 우체국 야옹 어쨌든 홍수 친구 일치 양주 집단 장마 눈물 단독 행동 환영 규칙 팩스 경치 서클", + "address": "0xd8478d9aaAbD8D2Ae16F98599b4522d1B4630AdB", + "chainId": 11812, + "validatorPrivateKey": "3ee011287dd7c3e7d95ee18ad01f6b2abbcf70bce43e4579c1912fc0d42c011c", + "validatorPublicKey": "0x8cc6cdd043143e80651fc8e961750a9d0abd7a9786bc15ffa0f675104d7d52608f8523ef33171ef3c6254d4180af3184", + "validatorPop": "0x9834785b3921230f9ccdb591d5142246266812b552710af24ce06b6fd7ed06730a4e227214ae725e3949aa8c2e2538060ea723f56554bed2d3448fb2861b75900d5b2c9edc985eb4ede051b61f6fb3a56b513d12436ec02d6269d7bd75f137b7" }, { - "mnemonic": "민간 장기간 반발 김밥 구속 도대체 부인 흥미 목표 특별 예선 방문 모양 팝송 시장 체력 국내 바람 한때 실천 채점 답변 서점 설탕", - "validatorPrivateKey": "4713625e63a40c9d8be9bf5fd1435fea867b8cd2d7d613f510327a5549b4e176", - "validatorPublicKey": "0x8d27677ece4df09c45b9d691ca3a48cfa911ddc57b2c65ad4a66497ba4cea2b0b3a47f93d81b44580e58c50bf5b04727", - "validatorPop": "0xa154a481d6d6a55a91dd3907503a69d31a30af91fdf7a3592eb9123740ed788dfb9e580d1d3219970b2b7412332af72202f8042a2ae4aaa408c733612299e9cd95ede7590948e96ccb698d39ae03b0e433a14a023cb912d290d1339a368e6ce3" + "mnemonic": "전주 후춧가루 보안 양주 원인 많이 경찰 변신 안동 협력 소속 자동 시장 당연히 우산 차라리 지방 냇물 장래 간접 미용실 비용 해수욕장 차남", + "address": "0x816F7F14ED6747E9d8aB2Ea95D91911784B30292", + "chainId": 11812, + "validatorPrivateKey": "67fdedc7e695dc51e94a24d447d187e96fe24f236b5b16f9c64ea83c25fe4311", + "validatorPublicKey": "0x82005bb6cef43bb58680e70a34798e786db4b844b2f38fe0185540cc6e8017d5ddd2465f75109a5680e34bceadda6124", + "validatorPop": "0x944d2c913c64c2a2d62faa3af244ebc7c419fd6cecce8ec07925b9aac142200c33aeedbe8d91198ae94808214066bbdf006499b6daa69b9fde29bb1120113ffe78a334b346bb102527669ef63bf589ae4312183f574f31135d317daa7d905e5c" }, { - "mnemonic": "빨간색 회전 서비스 악수 역사 기독교 주장 예절 승객 간접 청소 횟수 게시판 점차 잠자리 늑대 변동 전기 눈썹 성인 정성 예정 하룻밤 장인", - "validatorPrivateKey": "10f0db181425ee01de0a3df528464ac7182f11754eb7737611c2892ee695b80b", - "validatorPublicKey": "0x8f06ed86dc6361843cf2ebbf47571e145452e64f41967d43822cf8cab109e665d5183c3c508d9d88893d475113d3e2b8", - "validatorPop": "0x96c2f4684047651ae40f26a436ef676502d85929c3cdee8d4e6619204db7f3a977acacbb5f4bc18e93c5e108ade4a317070c98b78789b092d985f91c4cc569a727338a0764d6078b11d00c4b17ac93a196dc770ad0690403a036629e45e943b3" + "mnemonic": "초청 간접 경상도 양파 책임 피망 주머니 예전 초콜릿 준비 자정 항구 방법 대학 병아리 졸음 마누라 잠옷 명의 농민 예산 엉망 쾌감 온통", + "address": "0xcA4682c2D5392dC51EA94c3444C67e4D182a6b2E", + "chainId": 11812, + "validatorPrivateKey": "6c304e3417a2bfbd7b8b710a01a3ed1a374cf2548e97e9765d24f048e1fb193f", + "validatorPublicKey": "0xa478f0591bc482cfb5e0d87adc090d3b2413bbffa0ef47badcd628190323073e5aaebdd1dc0cfe6ef0da5583faf2f886", + "validatorPop": "0x93ac5aafd969b91c263773b576d22e8c4c1729280ca6bcbce64ca2d21e74f27438471a5803023284cdd10e7fd9d550cc0717a9bca930d7aeac93132cfef8170d95732d2991c85fae279f04c890a6c9be9468a69c351dab686db0af45df786c5a" } ], "french": [ { - "mnemonic": "symbole calepin gicler brioche rouge cabanon carbone hurler serein butoir opportun cocasse défrayer cirer butoir frivole bagage néfaste rejeter galaxie vexer aliéner donateur menacer", - "validatorPrivateKey": "107192d3dc98087153d457970bc9a4d4699e103767134574d4af7dade62814ff", - "validatorPublicKey": "0x8d1c3cfe91046e6b94da25ac219452c0f9abaccf281e355d4ee761c28c8cc87f8de376b151d291bddb8f98801af9b271", - "validatorPop": "0xb7f306dc033e2a329a62dd84fc753e73ad1e05a5a485a14d7e389eb93c8ebcf0fbe085c3816f416c130384e35e7cdd430c51d6e48bc32a24bf20761856557dbb58844e01978fc8693574905f37da3aade681f33c28d6a2a41a4aa9f236f6a403" + "mnemonic": "orageux racine décembre aéronef capuche précieux scandale peigne poisson torche différer oisillon lucide rigoler abaisser immuable insolite cendrier lecture chaise purifier période asservir poney", + "address": "0xC573c329e51Ef0b1B0b5A4A1DB037ee23bc185A5", + "chainId": 11812, + "validatorPrivateKey": "61830a901e72e72fe0ebb84f7af8707b53b88aa160088703cdbc9d382b8ea3a7", + "validatorPublicKey": "0x9431da3deebb57bfad8c3c182f0fd3c2e0ac33cfacefc9139fd112d048c915ba2d700f76ee345850bd0c7e394c1d34f7", + "validatorPop": "0xa57edac3bf0caa28fa03819b276fe11294836857c1e5cf4de8cc57c867e78c8262d7cdb49be4e38bdc8e19c0131325250e99273bfbcc3c40bdc4ab516cbb26a6d82ebc18b3244041b1f2c566a268521042fdd2a26d049510498ae05c1fee3539" }, { - "mnemonic": "grimper effigie divertir draper cabanon chapitre prudence nuire branche émission sénateur atome cumuler perte élaborer ajuster chien gardien déborder héron belote essence affiche frégate", - "validatorPrivateKey": "62c55a8f78e0a1361135d2796153edb4c492c0a64f337d5ed9940caa139cfdec", - "validatorPublicKey": "0x89e0159d10ac7d9b8a1b44363cc22af0a8686e7259b5404a0990b49fd6f14870293dc00612dabc4fbc664c36b2e09d37", - "validatorPop": "0x96b2f03b164e2ef2c785d421e5be35af588f2239fac3e09e026f655666f4d9bfcf5bb7e82a347869e14076f606683faf178b32e654c51ce96a15a8fab3c0a23af3dd00783a3b7f5c80915e4aab0e7baaad34ee49b14eb70a06037723c6c42869" + "mnemonic": "optique surface nappe pénétrer chaton défensif facette évidence thorax bourse apéritif tatouage boxeur alarmer mérite éolien risible sabler ratisser débattre exaucer véloce joyeux grogner", + "address": "0x2fb647927859c278896bdc1389504039D24A8ae3", + "chainId": 11812, + "validatorPrivateKey": "147feb3a4ad78f74b86ace018bae81349404f928c7414b822deb8764217e4d84", + "validatorPublicKey": "0x89e261e68067836675ef6bd75ab0a81ba430caf4a70bd17035bfdee202ff2fee44a9e22246848130b98d1408965e0319", + "validatorPop": "0x96d5911326d7fdfd40536cfc9272767b31713e0c25dc323209f74a617033ee555c41216121ab655cdc345fe8edc0370f0052308a70296b7a3a48677ded9c2602f2ff42ff276989936b89d0f6ac2e1d32b111f4b2e282dcd2ea501306dd6c28d5" }, { - "mnemonic": "toboggan atelier photon allouer prologue usage dosage onctueux stipuler grogner culminer rivière période horrible simple digne chute désert curseur hérisson abrasif nocturne employer facette", - "validatorPrivateKey": "63beff3c9b144e4657b0a8c7e06bcb8dbdb6129f87b1bf7e9b088e086f753c72", - "validatorPublicKey": "0x815eb470bdf93279f329b2c6cb9cc562bb48a5e00b9feafdd1d20dc50a3b5c2d2b58c5fc2b988fc119fb58e8b41a38ea", - "validatorPop": "0xa1ccd9e855b5ef39bb0e69bdf05f4f01aea431e490fc5647469db76554433d368b0b09991d4ee522d48712a6442b939d0b5162422512cd2933738b90cf64e2d9902ed928c339f14809568671dcedb7e083e0ee01a6d52112eb1916c8d1129e45" + "mnemonic": "majorer ingérer pollen outrager hanneton spatial suspect gloire associer paradoxe lanceur moteur nutritif injure apaiser trilogie graffiti frisson outil horde blond voter audible adéquat", + "address": "0x0537932Cc1fC63BDA3767C889d46f95A2b9Ab784", + "chainId": 11812, + "validatorPrivateKey": "1a6ed8888c48fbd08aa25666cf9222a7c7fa2648cb83968fc227fcb7253e4b76", + "validatorPublicKey": "0xb1b326c17acc896a0a77f9044334d64c93e1429129e6d83cac5a923ff5f152a37f24fd117445fa0df91ac47a99ecbf39", + "validatorPop": "0x8441cbcdfbef8cf25d4788555f75d7cf5f5119f49c6b332819685f0cb7dde307199d86e80eaa2c810475974bc86373920784d9689ed3e04d40aa6c6745f4c83e4a85a7bca94f83e4a3b54b6e46db1878c81c3ba7f9a796c2dd298bfe38cc6c0f" }, { - "mnemonic": "malice rentrer étoffer fluctuer broder solitude infusion éjecter chocolat jupon bolide opprimer peser éduquer sottise muraille ultrason épilogue relief scélérat épuisant trésor loyal avril", - "validatorPrivateKey": "508d83d6facf5c975c026eaf935e6752bf8e4bad2c27060a347b21f40c995211", - "validatorPublicKey": "0x983fc5e5b106fbc4e1743b5fc2bcfe1c0a480606332c8f2399c4b7836ef7bb48d52cf966a1ed8188c33ff337cf0fc298", - "validatorPop": "0xa3ef835b102095d71526d8b389fbdb21382acb4a3699eda3c3c45fab373c8692c71c666581f4149002dc8a1e89055409077d4d26573f4a8db803f654260b263fa4a8b113bba3876572e8853be6ba6b10c5b825d106fa3c8ddec8019f414166a7" + "mnemonic": "cueillir obtenir chaleur voyelle adjuger muraille orque déborder étirer épicerie combat étaler attentif dissiper merle causer dissiper cylindre métal essence hilarant encoche sérum capsule", + "address": "0x4D07466b4499b672D536D12d19d6c80B439e01Bd", + "chainId": 11812, + "validatorPrivateKey": "3aaebadc6b809922762a0487f6382dc982752360f5c862a523dc6768f05a9b5e", + "validatorPublicKey": "0x8c24b65a3d2bb1315c6cc94742bd7eb3576eee956b31ed76686f66e01eeffba90bb8db0416caed1db4be57edb80079ae", + "validatorPop": "0xaf34593f85f4ed5d1f84178177247ef7fa07e63c4fd6c9ea08b1a7da9a8a3e7184aa0423d568261d68f7bf6f834621ee04bb5a587c5cc1c7ecea0a5362bdadf40d1ce9bc66dc1f58fc0c99f7697da4d97e7efc58262345409d81748fac23ed1c" }, { - "mnemonic": "puzzle article fourmi groupe silicium voile amovible instinct tablier baril lessive lugubre grutier peigne respect public riposter sucre samedi dresser bilan censurer badge fiole", - "validatorPrivateKey": "68901c71a048ad1e0a6e173d99431209765274ccb44a424cf2b37812bcb8cb32", - "validatorPublicKey": "0xb6d31016d62701a79dd96355f170ac4ead35fe69d5c495fe66a51cd3ba6614701e1bb20dc4b66342bf0cac0cf962ccb3", - "validatorPop": "0x95f191017d80db3594edf7f89ecd5cb14df38315a5cdadebd26972472a82ed51ec61f2f298b9b67f2ec8aec8a780bd52075570349306257db974f548768f74a4fb68852b5b014418bb6ddb88abd4516bdc733ed3e20d9902ad38df817604b5fd" + "mnemonic": "soupape opaque sénateur féconder prélude magenta épitaphe cuillère divertir poivre armoire carnage position flairer sphère ingérer entendre fameux superbe abusif marathon ovation prétexte saluer", + "address": "0xA03E03fc68ded839b61b5b1A45E50F99281E38d8", + "chainId": 11812, + "validatorPrivateKey": "4b81b60d6bfc03f23b43364ee915c8ec74704d36680c02a8a8b1a9458ea8e18c", + "validatorPublicKey": "0x9054220309471610975b2ef75cfc1e109a0aeeb0ac5816fb67d69d835c9045543c7a897bd94a10f841c1b584f8b756a0", + "validatorPop": "0xb3695aa3d2ec7d24a8b65a84b03d339cd15a7dd44e247b1ab60621a0bf9b38ece5e056c4537791f5b08615291006d4ca018cd849e3e378c6b2fd055ddfdb3349fec685621819427db22a2338cc05adabddac1766595fbc4228782c0b897182f7" } ], "italian": [ { - "mnemonic": "assaggio deciso esito muscolo usanza fetta velina umorismo pratica dote arsenico volpe gasdotto delirio risibile scelto vapore verticale ricordo principe ausilio frana superbo vivido", - "validatorPrivateKey": "3d2cc5cffcf54dde9103d4d27484a8a1f2bcf3e6e2f46ac6f17abda8c14034e0", - "validatorPublicKey": "0x89f7c0f46c2c4d773bdb3af22d5395536cb5cd206ed54f5ed4568372c61e30f831999eb07ae2ac302ed67609af5093b9", - "validatorPop": "0x8e4b9a844a6ad22a4fd0ca3bcf5a420a647fc23b7415479be677eaee123f7f3e882fc51460c4fba20bb0f4aae3dd12f9163c360e5cea304cf209bd9ba850f0af6718cf77703d8a28a9c30e3153fa0a183254c09f3490ae6bdc9b3bdac23dc50b" + "mnemonic": "pineta orizzonte monco pomodoro cane progetto dubbio somatico chicca quota pirite sfinge picozza asfalto raffica temuto sodale strutto cenone appetito ducale europa persuaso isolato", + "address": "0x3DD8916a2b9163e5Fafd10d075EEf870A4AcdD05", + "chainId": 11812, + "validatorPrivateKey": "2b46e221597c9daf633742c8a50e1415e916d1d1fee7ebded5f425e9a34cd8b0", + "validatorPublicKey": "0xb924b28d8136fa3f602d392aa239ade4d3ce617c22588d61be3d4d43fcbcfde724f03db728ce27b48aee19a599da6385", + "validatorPop": "0x88cfb455d34539c63cd8369294b681d6e5f83fe6808fe9ebfc5c344418d7af5117edca8bff71f48215da9cb2d5e49aac0c0e3af410b2bc5ee4ee3a8b34693f309aa3a6adf759f3f21d3cb77a1801453ed594167b2e454f9f331cbecf81d460ea" }, { - "mnemonic": "addebito cellulare rassegna ferro selettivo sciroppo pineta sonda sfruttato nessuno veduto proposta pesatore daniela tariffa tizzone modello doblone cosmico rappreso pretesto ambito dentro frugale", - "validatorPrivateKey": "38a2c784846063065c35d4b20fbb58e0c94d933914bae7bd0179f8e4b681ed7f", - "validatorPublicKey": "0x8bfadd64382716c5dc45bd603ad47486563ca6bb1c628c428c7fc74e417063f1c839ef2c398bbf58aa5d477543427900", - "validatorPop": "0xa6587fed763a6d3a31fcc4615ef5da33420cc8f56041031b9b99584b16f1ea6998e804225a803a748a6d40fbe76210b501ae74756233b7fbb80f51287b905a885a6c617ebd3c888a6787b6762a57f30c10d2fbabea5acf65de976ae6ff5f4384" + "mnemonic": "vero grado basilico brezza caserma domenica retina mummia girato esaudire veduto sonnifero comune matricola rastrello ghiaccio stabile uncinetto cometa ruga dividere cardo altrove mutevole", + "address": "0x0ca83feB1E3a1dbE273Ae1573Fa118bBAaC01608", + "chainId": 11812, + "validatorPrivateKey": "6328b0b012592bda9901b72ce30e8735e1dd8260fe7cf780f99d0fdfdf420fe0", + "validatorPublicKey": "0x81b165e69359185e64d5541b9a5a799f61b1ed1643989c4f649722f09a2eaa47d61a1626551ea4e6df05a50a9bf24b90", + "validatorPop": "0x863dc2c0f496cd10701542e3dafd496283ff525bcc061246544660ec82b9427d01b26648bd2b8d6a07acf026274d76e012d174a8e771db1eb52247d3db0da0126b3efbe67268320666874d94fc53d61825c07c503f3c38aaa08b9358b30ee294" }, { - "mnemonic": "accusato peloso atono ingrosso drago ingaggio filo frugale legale bordo giocare merenda unicorno sillaba lentezza meschino nuvola invalido incluso lievito cronaca bruno pronome folclore", - "validatorPrivateKey": "6d1e23229f017876a276802df01e3b296d26e94ea3b20020a0539a8ad2dfc32e", - "validatorPublicKey": "0x8cba3304e81996eb5a4f054b621a7b69a8e100b0a0f6db862786c9353a6c5a42d35322b4fd18de84cca6dbfa4284874c", - "validatorPop": "0xb4f914d4990c00c45f96400b00a2b94954a4a9fe2f3b85b553650ef8c50387fe9806400a429d0a1e1ebcaeec3e2986430bb853b0d2c68126be66417f0c3bf786ce7eb22a605482f7d420e9163133a7f667bfb2aa4c037bbd03952a1abe66e11a" + "mnemonic": "celebre fosso argento simulato grifone autista convegno tannino guardare inglese gilda segnalato savana smentito medesimo macero amanita astice michele monotono upupa burlone ricreduto rogito", + "address": "0x035aD027C3DcdE446d4815Ce7EFb3F69Eb70e873", + "chainId": 11812, + "validatorPrivateKey": "71980cd911fbd1d6447e238f6164038b1e37998fc728eb77bc91f8ab5bffd52c", + "validatorPublicKey": "0xad14bc1d97552e932c4c3cdb8a34864db85369ff2a6567eaa549e6d18d2bed96e5139cc98e4a1eaedf05fe3d34b8c3ca", + "validatorPop": "0x8fed2d4953ae52785482f8f572b96bfe661470f2afeaf80685b5418c609e1628e314c73c9f549615f2949314c06146180c064252df786aab38b48b04ba5210814771daf7bcb0fb213715fd198a0e7d072c8e552f4ce6eb91e9ea7ab5f33e08b0" }, { - "mnemonic": "fisico briglia rimorchio dividere risata circa rizoma ammonito civetta orefice toccare pigro notturno plenario cedibile tacciare cardo affetto trachea delirio salgemma peccato orma rivincita", - "validatorPrivateKey": "4d760c6bdfdb94485e0632710029973d309ec39eb36f72ed299b7ee8760772e8", - "validatorPublicKey": "0xb0a15d79475eaf64f6b3fa0eb04baaeb6b45eba1fd416b6d41d886f31848a2103f743d41d81701e0ee924d07096d0c7f", - "validatorPop": "0x8dba6dcb0f9a51911a66c3b0896cec639f370ea40b8a854b234faca680f7b4362d863fc2b628794a485ef4c1892e291d04805b7560b449e6860ebca2560a5847f58406bb7eca0729a042bb1b0aab2afb57cb17e1af6048bff5d97f3cdf40b9b5" + "mnemonic": "amanita limpido sveglio essenza rete simbolo posa sutura gasolio rodaggio valanga enzima cellulare fulmine evaso torba lenza oltre fisico emulo ciao evviva lardoso sonnifero", + "address": "0x75913f8020A9E2ce02ACB50dA56aaD9BDB3F9cE0", + "chainId": 11812, + "validatorPrivateKey": "09fab0676191ecad40eeb5a6c88cf9d6298b0a63867e7ff2f2797900ebd7b1f7", + "validatorPublicKey": "0x82c3d8560556c3e18d1354f5c86df6cdde1b8152538b5c0ebf95e44b0c407ce4178f7ba0a752c4c9357ff068864f69ef", + "validatorPop": "0xad73408c121173b8b3bb7cffab0f9f37bfa53fe7a2247b81f4a12470c1e2692c7702c6ac48c00648b0fd03101605e56816bab487a42bb010ee2cf0e7c30f07494ff1b1745cda3e2acbbf2934242c89c16a9082a38580eb2f7c62bad9e9efecb9" }, { - "mnemonic": "perdonato dormire brama golf laddove globulo pioggia piattino europa mittente disgelo rigettato udire pargolo rastrello oggetto incubo ausilio stirpe sfera croce solido accusato steppa", - "validatorPrivateKey": "5a983ba66a4e971c277cb34e44f7c8c6b6f4c689d7b3e9360b743b446dff3b56", - "validatorPublicKey": "0xb396b51daef875a1cdb81cf02d4049d13855e713698db8041b54d784927702f92ef09f0806da788162bbb6cb87ba24a3", - "validatorPop": "0x905e66bcdb09c30760bb74640e567984f976ad840321f84f4b8ba50651dfe5eba151464e6a11d8cf60bfcfa6bd2a511c0b95945b34c5326fd68bea8c0e6ce11195ace9e2cba5805e3b537ff3aa54b2660ceb897ba1b7fd5760f81d51d6883647" + "mnemonic": "brillante caduco gonna persuaso castello brama ritmico aderire setola esagono alberato sorteggio avvenire orecchino rassegna calamaro tinto movenza candela fascia crostata succoso domato lentezza", + "address": "0x22eEeA7cF5Adf31D7C9EE4Ae42eC8dCB8f3064f0", + "chainId": 11812, + "validatorPrivateKey": "163dd8ebd8a17ce8921a0c4c7fa1edbae74ce463b60f06f0543a49a4fbe70834", + "validatorPublicKey": "0x8041c7b226156e65ba217723a5f49cd289e8b907cbae948dc01abfb30e56776688d05664ca2296539e8c034a273806e1", + "validatorPop": "0xac5622782e3deb2ad9e78771b302e61b07f1218b7be92c1f96ebcd218450111e47a09349f0ff596705bac049cfd88851193a4c62651e821ab640368cd94a849edf09892fb010a85772a4c6a45c89fb4173c071ff8b78201ce5753b993c9a9672" } ], "spanish": [ { - "mnemonic": "maíz encía sujeto pera tango espada atleta grueso cara abuso nómina elevar fracaso nieto género lino digno fábula oruga oriente pedir vitamina cinco tabla", - "validatorPrivateKey": "70b405bad8b30b77d4aff33adddc2c3821a8b30c08bfe99c115abaf08a8ccf6e", - "validatorPublicKey": "0xae4fbc7edb17c70d9aa22f3b4fae4866dc53c8c542b2a9049b11f466d63ccf8ed0bd08476b4bcaf1c80403120d8889c0", - "validatorPop": "0xa29fd2327fd5950eefb5c592772bdf25b7b8dd4536a7294d6dbabe08263af1080c2c318c791452b43664aeb60da78f761334dd1bb56130382107b7fe504e10d23b2f937c8f5a3cdc51134262ee0c370dc5d6e270d07e5f27f0a4e7419553f0ac" + "mnemonic": "herir magia aroma chacal buitre sufrir morro pegar batir ámbito laurel oído iglesia moño avellana botín umbral cuarto tejado vereda cubrir promesa cien aseo", + "address": "0x3dbF0BE2f667B944A0De244CdDf6Ffd07212D1F1", + "chainId": 11812, + "validatorPrivateKey": "5b4d3e3c9c28081c6ddc9f48fc727e1bca8d7654d4cbd7d6e61c23c435e6ed0d", + "validatorPublicKey": "0xab7318bda3896b5f431aef4b6d58d870caa8acc99e39825cb962ce736de7a4a6bfb24128553bb4ef6c0994cd54b135e5", + "validatorPop": "0xab32a57964c6ca75bb9f2943ffb6885b457cc8e17d3e5bedcc74d8653d0271e11a5dc68e1af78a6d30ebdbf918eac2d10470beb3710f2be56ed22290dd82dd5164d9f69b24cde6ab4912ef7a26b408d231a02560b1ea30a852ef42a81352d143" }, { - "mnemonic": "autor aseo jamón acción flor matar vulgar tejer nuera ronda apoyo mente agua kilo tapete pupa baño astro mazorca útil apoyo bestia ámbar uno", - "validatorPrivateKey": "15215ea82f34fbf37eb3ceec76daaf94b0d321e8c07d6c5fb5dcf084ee23cb8e", - "validatorPublicKey": "0x8e60ce19dc8ee0ca6dd7f6490cd8d313b0718b92c8784c4f2b6ffcf67e930a3b61ce516963d4138cb49275272e9c847a", - "validatorPop": "0xb143f1293a110c0ad56d2425a93ff271ac148a18c7dd63b8cb73984f0ecc32ab41789a9b0e1eea2c299b9147e345fdda08ef72b4ccf95110905d101aadae3e0843918552a244b79ea7792a570e6eafbf4ca1d8ee534cd872ab0286d68f311045" + "mnemonic": "acoso bambú asegurar iglesia paquete liga urgente bebé obeso cueva brecha enchufe alambre código emitir babor norma esposa testigo tejido fondo quemar ducha este", + "address": "0x8b8E98a816b7A0100F02e2eC0EAE5e9D718074Dd", + "chainId": 11812, + "validatorPrivateKey": "070659bb2ddabf24d29cabe658d61704b84028652b8950fac1c34febddcaf411", + "validatorPublicKey": "0x899eaceaa72d2b3f71242a7138595fcc0ff4d85882ed3652eaafb83dd6326cfe9782dc197d63d61724419279d90c90cf", + "validatorPop": "0xaa6b1adf995a5c9a5e24eb4b2e9b7b7c6b12d8eb8021cd52d3da3f4651470be781d0bbef81901899b2b4c9c65025f80317d31a628990d9eadc3e85c87fb6a62487c29c31fe79412443c01ab84c5cf85e74bd0edb5544b786769def67b1d4bbe7" }, { - "mnemonic": "acné duque palpar abuelo evento tos torpedo fogata islote tocino huida usar observar potro lugar ronco padre lucir hogar fijar hígado evento pago motivo", - "validatorPrivateKey": "57a26f91b6d86457c0c7602d259c09e2bbf8e4da7cc79e61719d4910c63425b6", - "validatorPublicKey": "0xb9109ecf95afb9e483a44651db450a6a521a260401b53b7b558d25cf25f3cc9218b75200a47c1e3dba93a2b9a8d4d946", - "validatorPop": "0x970c2b22e5d3f2c66cf4a039d74eb3a60dcc1e309280f476d9e1c2cdec1d9934871cf20d90a225aa38e79f6bb6cc36dc01cb25ccb4e8dfa17227c9d0930e768643586c6ea8a21950d53b3154a3e22c866c5ac70281f0633aaadae6e10fb5240b" + "mnemonic": "sistema foto bingo basura gajo gozar ogro durar burbuja disco oro evadir mil cajón acto nómina honra monarca cien tirón ayer esposa azote nadar", + "address": "0x8549447d7E48AC2e2188d64898c43235268dadd7", + "chainId": 11812, + "validatorPrivateKey": "4734ef4f5b5cb70378e7e4cd8098c219b17b1165c2e6a2e605008bc2e5772d87", + "validatorPublicKey": "0x8ab2796a06e73c3332ea4652d42cf1e328744996746425842ddc5614e3dc8eda4fed5b7bab78e95f9e3ffc4c480097f0", + "validatorPop": "0xb30663aba3976c25e3e2b901f269f6b579194bbcc1c27f19bd18ebe82e51a6fdde89c49c5cc2021f1f493595540cc53709900978e7f4eabddd096c23232260d44c9f3fbae733497598ee7167f26cf4882cf8795cb158570f34c94229de26476f" }, { - "mnemonic": "metro alejar máximo globo usar favor fracaso mes salón realidad sexo elipse margen superar asalto acelga anciano paquete lata cereza rico regreso fatiga fogata", - "validatorPrivateKey": "1a22998fffc2d23527c8de6e1f71c87b4fa8a12c3661839d1777e950aaf3ed26", - "validatorPublicKey": "0xabc04b56022055f74c91aa321f1bce9cd914f01e67ed3008b2448b0d9041074156d4cf944f502dd975bf9649ae7c9d0e", - "validatorPop": "0xb42dc75c320a3a0129f53b54ad8e6002dd8a95b484dcad02a95bcbc47b01d0a8820625c07fd963e32beb634b515383c602eeb074d20ca235778931d2efafb6d505c2196bf4f14dc1c946d88be912e9d22a5eed732bea12958950d6715088a08d" + "mnemonic": "bobo aceite vacío cuneta lustro sufrir átomo ataque alejar lector febrero tambor afinar vitamina sardina vampiro mínimo taco sorteo azufre cara fiebre mazorca bosque", + "address": "0xFAc6e1A518F38d2d8eD3F3bc0d0EAFd98735E401", + "chainId": 11812, + "validatorPrivateKey": "60703f8ea71f30684a5a0369179c924e4c89ada58f8f9832c5423e866d80c0ef", + "validatorPublicKey": "0xb1c557576d41125f6d660e482f35010ce769b4a2defa30e266fe616d264d3b764628c62fcd1d939c2ccb5353c64cad4a", + "validatorPop": "0xa204dc60d8a50636f11a7758ccf0506da3a7fad641acf63fe5c491cde4527e1d1f481c8550456f8a19abafd33ef607120f85159dffdf3fe68c90ab948e9e1300847aab2101b5c56da5529f0035baa233b391d59f2c2a7155798694713f23be5c" }, { - "mnemonic": "blanco escribir carbón arder llenar elipse seta opuesto sostén quemar vivir parar percha capitán acabar iris emoción laurel trauma joven seguir ropa lazo haz", - "validatorPrivateKey": "06b710058066d5e3b26a4c1891877a7b333a93bb8491d846bd322b77e1f94925", - "validatorPublicKey": "0xa1ab26d0ea3ff3d80764b10c5f5afb729457b37c07f4edf86d069148cb132bf7994ed27273fa4a5498d046e43822426f", - "validatorPop": "0x8c4400bee02a36e88476a45218cc391fc63c8cd93492d40a6ef9083fbbeed4ffb149d3c7e3761e97fb62426f1d0c08aa1225ed19ef8ddb80b3fe41ee7b7d63a9564f9435b2d292d692806cdecf999409a8ca9a51a331d719d3fee15297404050" + "mnemonic": "pelea taquilla fácil viaje demora monto feliz chupar carga grano marrón romero copia títere sonido agregar timo peligro lobo lupa libertad faraón álbum altar", + "address": "0x7dB8ED1343bc2d3e59A03AF2c5A4b8D31FcEbedA", + "chainId": 11812, + "validatorPrivateKey": "087b195eed0945ed90a6a631c389ebd45393e070b6b9a549ca649b9da04a04b5", + "validatorPublicKey": "0xb57dbc9105f2e4dcd2952b9931ad38fdbb5fdb526fdd3880f88dd2178d76cea6c597fffe1f0546217fd5e0d8b35df8df", + "validatorPop": "0xa12c1da65995c3159fc3bab0e1554d78791a2cac5748e513446c966db85a41c82595926d0737493043ff5cf54f759b440c0f0d3d7b50a422b69244dccea501c1489e99d08860f934f17319338b9b1a5957f290e4da79cc4cb35e0381eb01a312" } ], "japanese": [ { - "mnemonic": "いはん ことし いじょう はんい りれき てらす きない ふかい けいろ ぐうせい かいふく そっかん そまる ごうまん おおや だむる たぬき せんれい ろじうら くうぼ ことし たいおう しほう こふう", - "validatorPrivateKey": "1a051c7dddd9997f5175c50a19688e50774ea71beecbda2755f1a3ed72251573", - "validatorPublicKey": "0xa6ac75b094f23b3abb2d53ba413dcc3555e0f114fd6f43f3f461ba5ae1c4d0237ed86ee7ca26b2f6ad3f8830739c8148", - "validatorPop": "0x97262119a8a4ba92fe41b50ba19d09a0124c3910bf0f8f063b4784a389129b916a16f95d357541c5b72c11dce8d048b100a03bb7eb242b4101202b27cbc9d20e04937d265dfffc7da71a08313957224d7a5f2d410137f1a24bcb3c9c33ef4a27" + "mnemonic": "すける おやつ しめる したて たりる たちばな ほうりつ ことば ちけん ねぐせ けんみん はみがき になう ちみどろ はらう みえる はんこ ばいか むらさき せたけ ようか ためる うえき かゆい", + "address": "0x5145BDBd42675EE3Da1ecD1A6f5AA0f17C5cc779", + "chainId": 11812, + "validatorPrivateKey": "3bfc978bca8cea5c005493bfea939621854061d2bcfead8c118e0e5a85f3bd82", + "validatorPublicKey": "0x8781c8bd4f1ed3f834bb98be07ae5316cbad4b33a05573c487412541a06c6618a1eb4e6a4be587d836d6bfe656896cf4", + "validatorPop": "0xa811b720a0cfbc3678f2f3d1d2951e2fa01d28e9525601460d64ab7ec28dbccb0defbabf0c009461c07222a4c69d331511666e44bd57c0fcbda7419f173c078293d8ee3a7e891a00390f302e248c80319877e616feb7af605372a36940fcd967" }, { - "mnemonic": "ひんかく くふう にっけい うぶげ ゆそう やすたろう あんがい てつや ちあい いはつ あわせる ほかん ちりょう ひまん せびろ さうな さくら うやまう さばく ますく じむしょ みかん てのひら せんきょ", - "validatorPrivateKey": "2e3127928e4132fc4a2dcaa545793c8dddce684184a7eb6608d651f2a16db7fb", - "validatorPublicKey": "0xaad5e939d95ee279c215d6754064cbfb273753a7b455af53df76fb7c40c443dc97e55d8f32865d65a3db25bd9521c1ae", - "validatorPop": "0xabb1ed2deb2c0a4309d9535b38577f5696233bc938a745dc64f072dcf25658d11e60abb127faa74d2553dd21d7a0bda10fc066c52db7e41d011ff0c5c69f31f360f01b883bae752f9a519cd1c5fb93b78a72b05355fd84fe509971fe68dfe626" + "mnemonic": "ひなまつり しはん すうせん ひんこん こいぬ まわす えいが ほたて しえい くうぼ にっか しゃざい らせん まわり さめる るりがわら きれい くきょう しむける にんたい にんち さとおや ちきん さいてき", + "address": "0xBe53ce9a06358070ca439071E7c7ceCA9e3A5423", + "chainId": 11812, + "validatorPrivateKey": "0bcf664866a4894b1dd9a8388595c8fe87232ddbb48cd948de7878298c3e18be", + "validatorPublicKey": "0x9745023bf806fc3783bfa36344fa5a41d2d47911c375baafd7dc6394a4acdf067137b352a50d56ff4ac9273967b82aff", + "validatorPop": "0x98d2e6adc9a14e02464c172f903674acce2e4922ed34a17d5b3147c399028c42fc6dbc86dd59303a297bccb50bc324090275ccd1714cc423cb27d0f3b2819c4dc8a4145a7dc816259a1c679f53dff1594a8606f437cf1f55379768ca400a5041" }, { - "mnemonic": "たべる ならび ひまん ひめじし ななおし ひしょ れいぞうこ けまり うえき みつかる ちつじょ めいえん しょうかい こおり けいれき だんち しゃたい つくる ていか まぬけ もんく つめたい おろす りれき", - "validatorPrivateKey": "4d1c867862ad583d3bb2d2d0c0a2ae0545654d17647bbe212f5ebedb7ca42d91", - "validatorPublicKey": "0x89ecf8433fb87c0a9be2e8fc634849150335ebe456fc5d9c9bd5c7fa3509b3188c84b0a85f80b6faf99db53794ac0aa7", - "validatorPop": "0xb396c3837230d6fbeb092d314e53f726705dff9ad0eb65719308ad81df19e74a5facc0808c53f0a827679fa5b97d1914068942744ac92554bca4ca7c1cc7c99a7113fb556155c5eebe8d0d5bc8fbdb31385ed60711f8e8d86e8e2612f794ed31" + "mnemonic": "ねそべる ぎんいろ したみ ぜんら せあぶら せんぬき いぜん なこうど ふおん たたく ふるい おうさま めいうん すらすら くるま たいはん あみもの けさき けんい ちぬり はんのう あんぜん ととのえる ほうそう", + "address": "0xFE6144C35aEA9B95AA8db59b1390954fC5999F03", + "chainId": 11812, + "validatorPrivateKey": "4ff226389f26c025fcf49ab638ad0a378aaa1f1ab1e8b15fdd934cff92e0c397", + "validatorPublicKey": "0x807d253f834f4f7bfcd2b00b11c29a631b562bd8fe05da9f55a8f0cd7f5c88348c12d1e6e2753c6c45ba56c8e0945804", + "validatorPop": "0xaca0e4da113cdf58eafc43c365c69c225d7d6154990b34e7358b08bf76cea29d670be7c66fabbe9e6b3200cfd33a38400dc49168cfa59d59a67b4ad533be0f4d309acb38a86188f3b99229194338d68a8a80c96884952209f4ba1b40a48fba8e" }, { - "mnemonic": "すぼん あつかう さとおや けなみ とおる だっしゅつ てんてき といれ いんよう きくらげ ふせい とおく たれる とおい こむぎこ おたがい にくまん ぎっちり そこそこ そっと わしつ にしき いろえんぴつ るすばん", - "validatorPrivateKey": "43e6f36d626653ace495db7ec22594bbd4263d41d027b63391022eb4e06f7bd0", - "validatorPublicKey": "0x93b14985bdbc07562b00a65af6b2aae357f0db463e74b3074427f7d671a1bc1bb93feff91308846a23d6e31d243e14d1", - "validatorPop": "0x860ba861cdb76dda0a61b634fec9f5421f69a66a49b1b92eeafd6ab23d712fe1d831c133749df1bbf7f28bef4a469f55149854a5a70761432c1db15d981834f6f16679c406f61c483439b8bad47907952b173e4261c0f4a7397570553f086fc4" + "mnemonic": "まける べんり てんとう おくれる のらねこ がっきゅう のたまう かのう はらう こつぶ そとがわ ふひょう さつえい せけん ぬかす たんてい ねくら けんめい がっこう しらせる とつにゅう ぎじゅつしゃ こんれい はつおん", + "address": "0xB88f7d4637BE0F504c7dCE61758895c2ad681Dc6", + "chainId": 11812, + "validatorPrivateKey": "26f00d3558f7ffa4a5c9c6517f7ae0b47f7f58bb45735a4b868b7172f5c289c8", + "validatorPublicKey": "0xb65551a8aa25c8266ecb44672236282357a291842af0908c80b64a583c855f1c93d37bf4f779df3a65e903bbda38e75d", + "validatorPop": "0x93617f729a59b7ac56e34100c9ff41ff29b4f293dabaec64c5cc011d15faf69651bd7be537843c5ea2310395c646311307f3006c90997bbe03e5b347be5c1c7fe1638d07913dbc75f4ae453a693e3d7625ddf55b7790cb529d289d4b2a64044b" }, { - "mnemonic": "ほっさ ふんしつ いわい せんさい せまい はやし みてい まんぞく ちいさい なまえ ざつがく てあみ こんれい はいち おろす たいえき くどく いたずら まねく こたつ がっこう おかえり てんめつ せんちょう", - "validatorPrivateKey": "6e651b09fb37b34f167fbef154b02c21df3b0befa628123a5ca5892b3096482e", - "validatorPublicKey": "0x88755c8f172438ee524351f3fbc7df85a536bb6b6a15a0cfcda60ce63eb3003c5cfbb3f7161021500cb6afe08b845fbd", - "validatorPop": "0x8a5867a775ee373be5f706dc6619f1527dd2f0ceef0103100a614617deec9d72b2e5d8559599dede83bdc4b044592597055fcf761a2d06fde89c6f817be3d539e5ca39dcb4fad6a48bfc96d3e8ebf873e2a244a039354bfbd642c89f5d9f5f21" + "mnemonic": "はんぼうき ひいき ねあげ ためる ついか まなぶ こあくま わらう めんせき げきちん みけん うぶげ せんろ ちたい いんよう かいすいよく ろれつ かいしゃ たいき たかね そんざい あつめる きつえん きくばり", + "address": "0xBE88606fb9b002f898E066380A56f314502Cc01E", + "chainId": 11812, + "validatorPrivateKey": "3c49518e65e2170ea02a5a6d851fec0a80034331ead88e3764a1f48c1c08cc7f", + "validatorPublicKey": "0x99c23bc0f897897fc07064d7b721facfed205a37b1aa2265d8d11dc678e72fd1360969a3921c00dbfb1b4c9be27c99e9", + "validatorPop": "0x9165d4d17c316ac50e337864f09214d4d0965bd44faa254f1928a03b256f7fd3c85198dbd9ec38fd744c1c219010e24517fec9d499c89699a087822e20fb535d634dfc34f595acbba882cfd9ed72b19565d4a08fb37a277b8b1824895071b8fb" } ], "portuguese": [ { - "mnemonic": "empurrar jangada bajular cratera imenso hidratar prensar outono oriental pires carreira tamborim amolador mexer tinteiro produto tenente pedestre advogado rupestre grelhar populoso indutor igreja", - "validatorPrivateKey": "6cd1e26fe4b60cdacec4fbbf4a69be53084ac1bf776f982d5bc3b5ddb1191620", - "validatorPublicKey": "0x855fb0ffd9d7c8d97c94093eaba87e31a9ee496a2234c02448d6b2004958306c1d5b9582adc1f982f4ea931569af460e", - "validatorPop": "0xa2e75834a16c982391bd423ecd3985eeac8e368507e6038fee8ec8191fe97269e0db822660dd70e353bf960c5fc320d61059366e2d16e2a2a2d9c271026030dec6af4e29f8c446f60b637c33fa7e7322cc6e2a0683831aad96ea37165e4a9bc1" + "mnemonic": "girino moeda minoria aliviar enrugar decalque toupeira berimbau duplo roupa apego separado pancada piedade massagem exato canudo sotaque hibernar possuir cozinha jornal vibrador gralha", + "address": "0x701a7d6a5bD108fD7aCA7C706fFD6d8931966F25", + "chainId": 11812, + "validatorPrivateKey": "72fdc62a31d8a17db238d181e3cf1256dde5749fc13df010d9478f176ea650b3", + "validatorPublicKey": "0x973d61f17ee8efd6c70bba737d2e5a14c308f1898f1f2431e0a2d9fd149213b822f5bac9e5e44fb88c478884ffe73380", + "validatorPop": "0x91eb0cb15604a9759a1f57cd553512a9b1534f989e27ca5dac70398564ace49e094c08e0c894147573c6f82abab8a1c50ecdcde910a785460b49ed90883cb2fc46e187621cee0d54c61481313dd9ec84d7a9a35fd31bb1c3769d47cf1bf375fb" }, { - "mnemonic": "damasco visto duelar cruzeiro repleto avulso esteira magreza quimono esfumado sono guarani prece pasmo enfeite atarefar selvagem vigorar vestido sinal foguete silicone apanhado focal", - "validatorPrivateKey": "5343c9ca5f432b8adb57295480e40e2768ee81ac4bed1c00003314cae960f9a7", - "validatorPublicKey": "0x80ec1e2fe666acc1fb58727f71ca59599cf7444266d953de513c893bb242854c72b615bfd7335cc621963f57a62c739f", - "validatorPop": "0xadb86bf20d58a9930dac234b49104f51fcdf4264bd504ed7afc735a89830fa3d0590e5255631938af8944d094e16d79e0a514f33c1eee477d377289bc11280c9c12805839b47467b36e1a1cc48e6ab75f2e6d5b0016e9a05b43827acd490f788" + "mnemonic": "risada valores nadador mirtilo imenso enviado eleger laboral maxilar favorita hino fandango desbotar batedor beldade granada roseira beber mastigar haver derramar grampo pairar acetona", + "address": "0x311e37f7fff6A5aBda898bCEFe5BFC399A112D3f", + "chainId": 11812, + "validatorPrivateKey": "6937f1fa57aa359e9f10246317d2efc7a826b5fac22e70681dff94a11d4e87bc", + "validatorPublicKey": "0xb470bcfd5d5a020978cc690edc9805108eea9950fdac261c090855c08f55c9d070afdba44fefea5e06a67fcc1b6331b8", + "validatorPop": "0x973e3ac10de57b854ba9628228203084d8bf7999ac14f4715d62b4270a7e586c82856f30f83a9f9e7c3ce59a09eb667d06e8963d5452dd23003a92eb741167fbf163b103111d7c83c8037bbcb5b8dce636738829932701d275b60d976624f201" }, { - "mnemonic": "medida genoma solda deboche corvo lucidez ciente genoma papelada muralha atracar expandir honesto guiar donativo careca surdina pantanal carbono vigorar triplo toxina peculiar piranha", - "validatorPrivateKey": "0206938e176266422b3c1f21c904e707653f299e516482717ef5f0e566a19ae8", - "validatorPublicKey": "0xb0665a81085b96a6c0c459e5dab927a49878c18aaa6e7086efcaeb6f53c5590636d2b41c0834af4884ddc5afc6d9c5c8", - "validatorPop": "0xa828d7b90866bb764113b4b669d71328225250d21725b7c4942500c41b41367418511b0dbbc86b17baa171552e218fdf01740d3f1a9fb608dfe42c3a456d85dd588f8b29eeb45440348e4d0b29d31b239383d607a3f4df0ce99bba8053f9be41" + "mnemonic": "dormente conhecer gengiva surtir reanimar cheque biombo fechado auditor criminal crer serra aliviar frustrar fardado curativo legado assunto idoso fruteira adequar albergue dobrador opcional", + "address": "0x72790c30d323d27716041a34e4f0a9fd993DdDFf", + "chainId": 11812, + "validatorPrivateKey": "00f2973b2dc35330eb854737958960852d9fef7be8739d8e6b4885d903cbf2ef", + "validatorPublicKey": "0x951c7dbd04866c7e20791d9f7052fcda108baeeec138bbcc006067e03bfa9b5d102f83ab82d2431563e54072dfed75b5", + "validatorPop": "0x83882abb827f4dfbb91682ad45ee65460e202cb6a07e82cee704d17d647e254577f9469a943e67afab80d739730c284713b38d3aead30e1c49838359dca3e6629634b7a3f00608cc6a3e9c52648f042c8a27a247a15895e7ef83f0f06a0185c5" }, { - "mnemonic": "firmeza bovino captador sovado roncar pupilo gralha raiva edital relativo voar ventre censo ilustrar aclive membro negativa copeiro copiador patamar incenso sozinho chover refogar", - "validatorPrivateKey": "71195017204610b004b5030d0cee33ac0c7d0bd95b33d89f93c7b61746812936", - "validatorPublicKey": "0x813c929f451a522de69e36ff7e94ca3c6d34123e3050110e1a47a215e0beeae8e0eaf438a5dc8851f0a748c4587821b8", - "validatorPop": "0xb486b3bd7e6ef57a186b798dbb446e3102fdc396a98b18acad0d2b31eb957925c3b067511755ebedd5705a1ed3fa28ad1883be3d9511f7a691d3e5672590ad665e838968cc0c2f6ba28204683eb1719833fa84cd2e90c6b5eae6fea8b9adfdfa" + "mnemonic": "tremer empatia acomodar cachorro demolido engajado cabana tapar ilustrar filme vala afivelar tentar bezerro dorsal sedutor exclamar berlinda patamar suposto gordura talher policiar ramal", + "address": "0xD6643F6459Ef761d60E5b8ba376bA702eb26B57a", + "chainId": 11812, + "validatorPrivateKey": "66847392efb1784efced6d584512ba58619bad17e55a28da4b938f2c4578cdad", + "validatorPublicKey": "0x901ff1d332e78ab76e4f87a8bde22c3e4a843fbda95cfecdd1cc99544fec337e96eed34d9936953cfbc5edcc16d4f801", + "validatorPop": "0xb288bf88b05c7dae19c85ceef07b56ea22a041c1d2639fc13baf3aee673c2fbbb7262ffbece400424636328fffb0a1280268552ca45d09b93e071da953b2c1080ef53f13d1376cb4b2f9bace47eb66cd66e40e6a9d85d6ad206c01d90f3eab0b" }, { - "mnemonic": "abaixo louvar navio matutar duelar cirurgia notar infrator noiva esponja afastar moqueca viveiro envergar litoral tijolo coquetel arara ambiente germinar emulador enlatar esfolar veicular", - "validatorPrivateKey": "2d5aa4d2cbfc4c85f889a55b7be68b5d36c7c3d5a960509fa6b809bd319c4a87", - "validatorPublicKey": "0xa4670f07064f089d9157197cb6357bd58f099ba81db516cbb8e3642e433e529de843937896463845d615edf009223c4b", - "validatorPop": "0xa23094dce8e0af71a400344cfa63fd46735e9db1ca7bd0a0ec034ae1313dbba15f59cb21728852b07f4c956af2982db6116ea39de2e4db3500684f4d822859ab9ee55d6ed84da54e8c5b4fcb20f70fe431fecf0d414cfbd1bcc66516438d1acc" + "mnemonic": "farofa nordeste sintonia educado legista esquerda joia velhice engraxar vogal vuvuzela sacudir operador pneu agiota muda espreita sarjeta empurrar iraniano apelido chamado pacote robalo", + "address": "0x1A57d2cf7DC28138A7D93B079D7F17e91A40BEE7", + "chainId": 11812, + "validatorPrivateKey": "07a391bc72c2ae7cef0df728819ebc24867b6dca64fe8e82a387265519dade2d", + "validatorPublicKey": "0xa9c523cf93936605db296344b003ae42d2060bc7fe4f86ee0ada9ebaa96d01cc20ef59b8f8db835c1a88de60d5da14e0", + "validatorPop": "0xb0bf0b2892aaece2e0ad81365b2a44c3975bb554b60d0639591116a9fa791fecdb094bbc4af4acde4498fc0d918888ee0b4b2a5d40e61394f46dd9a2404843bbd50ff162c3c19aaed4a46a719c7042e9be44df0bb05a2af88bbf762791df9fa5" } ], "english": [ { - "mnemonic": "know blame layer barrel achieve wrap crystal attack mystery manual fragile decline grab tennis model lift hen slush memory wear hobby soup major fluid", - "validatorPrivateKey": "16c24bbc9fb2741f47a7ed5f37aeb59ef9444fbadaa3008eecb7964659899099", - "validatorPublicKey": "0xaa52febae59e6068a1d9527733553ed9427eee40b42d5ac745371dcc4618c47f11b811cba6beed1fed575fc401a89ba4", - "validatorPop": "0xa763308ba9149bca48e7cccd6047e970c249cdaae339f355c60667497a5a803e51749c162bea375edd94574447a7396d0df9c4ef57245bc105f1c9375f79f0dfccfa8df76b9e524529bf556b17bd81e0576fbaa4806355c3629f26f47d01295d" + "mnemonic": "jealous flee math risk vacuum attack borrow merge suggest unique ankle amount section they secret symbol salon afford luxury mass adapt key impulse want", + "address": "0x4A42E44770e9AeBC34E6Fa4a792877fAA763db43", + "chainId": 11812, + "validatorPrivateKey": "3d351c7899a1f4b8d139e8adaef636c66de9f3cf54ed54bd9850327ca463f1f5", + "validatorPublicKey": "0x87c4f4ed39e8246ac0c51ea780740a26afc60d5981d07b3aaa06d4fa4a787099f40dc7c3da327bcf03af63e08dba6ccc", + "validatorPop": "0xb4531c727fd279155b610d3e869e660061fa438a45f2d52862a14b43bd70953541a53ac82539c22820d44cfbbd49d229099aeff28591b2f26bf94bcec4c115ef0558b0591515fa0458064fd8effdad8d21848e93d2e5b136f5da57c8b2d574a4" }, { - "mnemonic": "device cart aware icon joke taste inject goose degree various oven menu obey ride enemy find flush ribbon orbit thank zero protect tail fresh", - "validatorPrivateKey": "13f4a2433ac8c56eafd74a242f34ab650c4756bb4ce01fd4cc79d7889777e374", - "validatorPublicKey": "0xaf835876f9a6578b6e8fd9dc811d42927eab7fd426a3094d4c98203280137117381857d4d6d083caa2dce34e98c85a91", - "validatorPop": "0x8676e292790d03a51f59fc94d86dd572c5d5c0d4ffc8beeb434e0f6e31053631b5076d02ddc544cfbf1f0d1547cf8e1c105f60afd0f9c4dcb1cd96be39259999dabeecf2b60df77ca31e0bc3b406d049ad82ef89e9bd8b4af57547150d3483a5" + "mnemonic": "half fabric screen husband razor shock wise gold goddess grain fence doctor two exercise school garage bone early example basket scale street nephew fold", + "address": "0x4C14d773B0416a4eE0E9f3cbB35F9C2155272970", + "chainId": 11812, + "validatorPrivateKey": "1359ccc2424a2b4e394f88ee8987c878bdf8b89dada2278d58e01ce06171485a", + "validatorPublicKey": "0xa4ac111ac569b2e1c17bdd7735b8887d6fb2a610c48576c27202238610fea48ecdb534b4a878542f06079be5cce0ea3e", + "validatorPop": "0x848aa21ad170ea280454eb207bf8add008e44711a418777c4f6972242b9c7a90213a01fceb5e0bdaa5dcbda8c020b686176b1fdc4ea1d2eb8b83c91ae8f02477b6db144bf78dbed3af8823673e6b9b70e9c2c0008c1e6fed9791ea2f929d8e45" }, { - "mnemonic": "during menu novel beach project total place embrace language pumpkin bag trap survey afraid maze gorilla vast bacon hole poverty recipe treat jewel sustain", - "validatorPrivateKey": "55bff2f1883b1bbc4a34c8e145af725cf0f93da28edb11f104bd1a688872d9cb", - "validatorPublicKey": "0x95f332e9b984babbd76c2d573b6dda8c1ab44732ed078b1a9e7760925c885acb023ec9a58041f6142068320d976a2c2e", - "validatorPop": "0xaa23783e6a5a2e03d6db9fe746072fd48834bd6d06b5e22f696b58f4badd6bb9eb1feb92df67f8d0d256cca678f41a970591a9d56fc00e8ebf8866bc775af86caca7ebbbf44d98f36ffb6ffc82c866f471fea1c21c3a75ec128eb42fd4591563" + "mnemonic": "result culture regret fever dismiss trend diamond aware cage friend space swarm element obtain excess sight excite erosion pulp drill song fee review require", + "address": "0xC15cb4a38811f9951F989bB9c6D5f6C582979766", + "chainId": 11812, + "validatorPrivateKey": "6c62f6aa481a0daf69487778bf65ca0a1eece994f4157b2b8e9e8ca1fc85c6f6", + "validatorPublicKey": "0x96310e9e06b9ea9abe55178411590413989d45aad09a45d275c5c6ed3fff800f1ddcb5bdf1fb14f92caad7d807d701cf", + "validatorPop": "0x8f10c64c66da4f3db3d79606876760780be6cde5236cf2812e841fe2c94142ef6e3ad0f35e7c3f38d7adebfcfc28805117c3ecbdc1b60e3e23450432cdcf58bcf48edf5919f7b4582638278896045d4066888e5d40effb767060539425818a16" }, { - "mnemonic": "purse wrist scissors matter blanket stumble square notice dirt bounce cross table earn hockey retreat ridge lake wage comfort truly write select buffalo place", - "validatorPrivateKey": "53b0a649d988a38e074596a052a613abd35ca3b0c8dd98d6da4e4765162933f3", - "validatorPublicKey": "0xb92f8b7a2c83a9a508039e98caa647f17ef42585b8140b8e2b542b5c32806730e03402d767b2e19f629b90981f6a1020", - "validatorPop": "0xb0349a73f2cf56dae41d5b72b2136926c988b43fb3dd89de7248b74eb1ed0463b06de3f7c6bb367b734c0360022946261763c43f7817ab34dc25e043c2209993f1d47495a324c01bc7fb783388dd984be955937ba150cb07c555c1d3529d036f" + "mnemonic": "exact relax wife school joke net delay arrange juice elephant lumber rebuild tip system govern price lawsuit bright infant pill design beyond lazy extend", + "address": "0xd0D85Ae3A7f2b33eb2a3C1BBD9c4dB672F011214", + "chainId": 11812, + "validatorPrivateKey": "597f1bd80e8727e9a18affa2e6c0ba21edbd3a9b35b175b723db908e85fa8e74", + "validatorPublicKey": "0x8be09c472df2f193b842e3047d233bfdeec64a0f8a29b5cb11fc9ea1be2fa1086303010819a11a0ef324fbca149e7ea6", + "validatorPop": "0x89e410b092b5396d557930ba4cad7d57d19bbe9f6cc309a39f921261b7122783be0c1d95dda5f53b9329331f8df945730ffe0994c2d0858a8e728cb141b7433adf2b79cab3065ec8fe617e6473ff2e56a81d241bf6ad07a10ed8153149b7ba62" }, { - "mnemonic": "salmon bunker faint disagree cruise spin soon spider number pudding drift super behind melody slot top leopard odor cheese tomato roof wonder off filter", - "validatorPrivateKey": "3e12e7627f215132fd14003f996844de67f90f51ad5e5c98374f684cb77e0717", - "validatorPublicKey": "0x8253ba7a64fbea2746e04274ffbead5c19492af8fb6aecfc84a8348b8d116fb59d9e125d2e713fa73f02b1d9037ab5aa", - "validatorPop": "0xa0f8cb0113f6975a434fb1d8e30f15ad3c8d8c9a3862f648f227cb5b5d168843bbae3f3bec10f0db81d1038266891eee0e8261c5e5689098a83cdf86d5fbf3afe1eb1b511bf8c7aea224b1856940471923a223fded43919b01f44c2b85b33005" + "mnemonic": "cry onion vapor witness able child cute alter audit warm easy charge siege day warrior reveal quit ski jump tent crucial awake weasel plug", + "address": "0x96f4d918A88E0eefc6c7948d013E55e1010978Cc", + "chainId": 11812, + "validatorPrivateKey": "2c000bb38572ef853e3216957d8bc5ff4acb4747607c04d1417c7703300ba087", + "validatorPublicKey": "0x80b223965be2165442c8c3a8c4dd0ef6aafd4518cd2bfe68923069d37dd5724b7e314576d5c4d8a16e5ff6830c3b84a8", + "validatorPop": "0xac915643c43e001d4e604c788f413b4647e5fac51f8db42e5283d440c4e38770a04487a00945a86302ab77b7cd082dc5015d0e1f03a74b4d337effda25cbee4321e1a7388d564fd07fa55fef323370345b2495fa7f34c677964abbe26cee844d" } ] } diff --git a/crypto/fixtures/transactions/validator_registration.json b/crypto/fixtures/transactions/validator_registration.json index 81ff420..c8b7ca8 100644 --- a/crypto/fixtures/transactions/validator_registration.json +++ b/crypto/fixtures/transactions/validator_registration.json @@ -5,14 +5,14 @@ "gasLimit": "200000", "to": "0x535B3D7A252fa034Ed71F0C53ec0C6F784cB64E1", "value": "0", - "data": "226f2645000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000030a18dba7811b212bbb2f080d7c69935998ffbe7b38586e2d3e9e12079ea789996d1c69feb158c002aed327f69865be496000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060a124539f9d469919eb57224cc003d9d5b086a27c6de244abf60b74b35fb749fceab7f4c24b983475cddab7d0876de49c000b5c362f5e3ce18d964f5c2d20d4eadcf7cb77a73d8ee4cd87bad10f7ba0824cea6715d1c045b4f93865a2758b7bfe", + "data": "226f2645000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000030a18dba7811b212bbb2f080d7c69935998ffbe7b38586e2d3e9e12079ea789996d1c69feb158c002aed327f69865be4960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608dff1b303bfacacb2eb716892b79123b256314d8fc91635aae307f0fd7faf58019bba25c494b38eb1adccd91f49923ef00e39947932d7edffe710c48b9ab61ad4a9bd48f41f9babcfdd5c88bf3ad74c4d70d091a407310297b1dc4bc84ec6d5f", "network": 11812, "v": 1, - "r": "2ac3550cae0c7749e131b482ea3c5a5d4ca66f4b84e54861ab86cd68340f50a1", - "s": "17101f0c0b91c713db6f79c1aa95c83a2cf7a6c81085692af8526b7b755d5692", + "r": "ea221e5359e4c2dc58d5ae94663596f57d36b4de48588b68866014605382bfcc", + "s": "79cdc46c61665218d9d8320cd863f697ddf98676c49393ef9ca104b154d8cc0d", "senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d", "from": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd", - "hash": "cc4331ec856b588436e8ba3de8b04175b4537fbe1cc4dd6a6e8a1f92788b206b" + "hash": "70cb48df84bc18a9c83f56cd013ae4179af24ed77aca00c3530bb3b5e790cc6d" }, - "serialized": "f9018d0185012a05f20083030d4094535b3d7a252fa034ed71f0c53ec0c6f784cb64e180b90124226f2645000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000030a18dba7811b212bbb2f080d7c69935998ffbe7b38586e2d3e9e12079ea789996d1c69feb158c002aed327f69865be496000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060a124539f9d469919eb57224cc003d9d5b086a27c6de244abf60b74b35fb749fceab7f4c24b983475cddab7d0876de49c000b5c362f5e3ce18d964f5c2d20d4eadcf7cb77a73d8ee4cd87bad10f7ba0824cea6715d1c045b4f93865a2758b7bfe825c6ca02ac3550cae0c7749e131b482ea3c5a5d4ca66f4b84e54861ab86cd68340f50a1a017101f0c0b91c713db6f79c1aa95c83a2cf7a6c81085692af8526b7b755d5692" + "serialized": "f9018d0185012a05f20083030d4094535b3d7a252fa034ed71f0c53ec0c6f784cb64e180b90124226f2645000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000030a18dba7811b212bbb2f080d7c69935998ffbe7b38586e2d3e9e12079ea789996d1c69feb158c002aed327f69865be4960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608dff1b303bfacacb2eb716892b79123b256314d8fc91635aae307f0fd7faf58019bba25c494b38eb1adccd91f49923ef00e39947932d7edffe710c48b9ab61ad4a9bd48f41f9babcfdd5c88bf3ad74c4d70d091a407310297b1dc4bc84ec6d5f825c6ca0ea221e5359e4c2dc58d5ae94663596f57d36b4de48588b68866014605382bfcca079cdc46c61665218d9d8320cd863f697ddf98676c49393ef9ca104b154d8cc0d" } diff --git a/crypto/fixtures/transactions/validator_update.json b/crypto/fixtures/transactions/validator_update.json index 0e1c2a3..8d5135a 100644 --- a/crypto/fixtures/transactions/validator_update.json +++ b/crypto/fixtures/transactions/validator_update.json @@ -5,14 +5,14 @@ "gasLimit": "200000", "to": "0x535B3D7A252fa034Ed71F0C53ec0C6F784cB64E1", "value": "0", - "data": "8f062626000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000030a18dba7811b212bbb2f080d7c69935998ffbe7b38586e2d3e9e12079ea789996d1c69feb158c002aed327f69865be496000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060a124539f9d469919eb57224cc003d9d5b086a27c6de244abf60b74b35fb749fceab7f4c24b983475cddab7d0876de49c000b5c362f5e3ce18d964f5c2d20d4eadcf7cb77a73d8ee4cd87bad10f7ba0824cea6715d1c045b4f93865a2758b7bfe", + "data": "8f062626000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000030a18dba7811b212bbb2f080d7c69935998ffbe7b38586e2d3e9e12079ea789996d1c69feb158c002aed327f69865be4960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608dff1b303bfacacb2eb716892b79123b256314d8fc91635aae307f0fd7faf58019bba25c494b38eb1adccd91f49923ef00e39947932d7edffe710c48b9ab61ad4a9bd48f41f9babcfdd5c88bf3ad74c4d70d091a407310297b1dc4bc84ec6d5f", "network": 11812, "v": 0, - "r": "5500089b0b0afbf2a638d7fab985d8def9e44c0087859f6e5e0561e37dccc487", - "s": "219b047c62e0d94b3e834085dc0cd6b5f12c6f27ab058e949dec82f24f29b4fd", + "r": "65d33208546683e1b15a5838e75d6e918d6a0b6a6af249479b1364a3de1c1c16", + "s": "77180f51d14a00eb92c7296aaf31d70ca82ec961f0a0e9c34069ce1d0a278622", "senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d", "from": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd", - "hash": "142c471a038d69b7ae7d18c83efa767a16915dc750a380966f50959beec9f9ea" + "hash": "7e84d174ead70741b92adfc3427dd612b70ecd57e8ffe69462f96670f5607be1" }, - "serialized": "f9018d0185012a05f20083030d4094535b3d7a252fa034ed71f0c53ec0c6f784cb64e180b901248f062626000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000030a18dba7811b212bbb2f080d7c69935998ffbe7b38586e2d3e9e12079ea789996d1c69feb158c002aed327f69865be496000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060a124539f9d469919eb57224cc003d9d5b086a27c6de244abf60b74b35fb749fceab7f4c24b983475cddab7d0876de49c000b5c362f5e3ce18d964f5c2d20d4eadcf7cb77a73d8ee4cd87bad10f7ba0824cea6715d1c045b4f93865a2758b7bfe825c6ba05500089b0b0afbf2a638d7fab985d8def9e44c0087859f6e5e0561e37dccc487a0219b047c62e0d94b3e834085dc0cd6b5f12c6f27ab058e949dec82f24f29b4fd" + "serialized": "f9018d0185012a05f20083030d4094535b3d7a252fa034ed71f0c53ec0c6f784cb64e180b901248f062626000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000030a18dba7811b212bbb2f080d7c69935998ffbe7b38586e2d3e9e12079ea789996d1c69feb158c002aed327f69865be4960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608dff1b303bfacacb2eb716892b79123b256314d8fc91635aae307f0fd7faf58019bba25c494b38eb1adccd91f49923ef00e39947932d7edffe710c48b9ab61ad4a9bd48f41f9babcfdd5c88bf3ad74c4d70d091a407310297b1dc4bc84ec6d5f825c6ba065d33208546683e1b15a5838e75d6e918d6a0b6a6af249479b1364a3de1c1c16a077180f51d14a00eb92c7296aaf31d70ca82ec961f0a0e9c34069ce1d0a278622" } diff --git a/crypto/proof_of_possession.go b/crypto/proof_of_possession.go index ea61f73..6384b9d 100644 --- a/crypto/proof_of_possession.go +++ b/crypto/proof_of_possession.go @@ -3,13 +3,17 @@ package crypto import ( "encoding/hex" "errors" + "fmt" + "math/big" "strings" blst "github.com/supranational/blst/bindings/go" "github.com/tyler-smith/go-bip39" ) -const popDST = "BLS_POP_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_" +const popDST = "MAINSAIL_BLS_POP_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_" + +var ErrInvalidProofOfPossession = errors.New("crypto: invalid proof of possession") type ProofOfPossessionResult struct { PK []byte @@ -26,19 +30,28 @@ func DeriveBlsPublicKey(passphrase string) string { return hex.EncodeToString(pk.Compress()) } -func BuildProofOfPossession(secretKeyBytes []byte) (*ProofOfPossessionResult, error) { +func BuildProofOfPossession(secretKeyBytes []byte, registrantAddress string) (*ProofOfPossessionResult, error) { + if !isChecksumValidAddress(registrantAddress) { + return nil, fmt.Errorf("%w: invalid registrant address %q", ErrInvalidProofOfPossession, registrantAddress) + } + registrantBytes, _ := AddressToBytes(registrantAddress) + sk := new(blst.SecretKey) if sk.Deserialize(secretKeyBytes) == nil { return nil, errors.New("invalid secret key bytes") } pk := new(blst.P1Affine).From(sk) pkBytes := pk.Compress() - sig := new(blst.P2Affine).Sign(sk, pkBytes, []byte(popDST)) + + chainId := abiPadWordLeft(big.NewInt(int64(GetNetwork().ChainId)).Bytes()) + message := append(append(chainId, registrantBytes...), pkBytes...) + + sig := new(blst.P2Affine).Sign(sk, message, []byte(popDST)) return &ProofOfPossessionResult{PK: pkBytes, POP: sig.Compress()}, nil } -func FromMnemonic(passphrase string) (*ProofOfPossessionResult, error) { - return BuildProofOfPossession(DeriveBlsPrivateKey(passphrase)) +func FromMnemonic(passphrase string, registrantAddress string) (*ProofOfPossessionResult, error) { + return BuildProofOfPossession(DeriveBlsPrivateKey(passphrase), registrantAddress) } // Ideographic spaces (U+3000, used to separate words in the Japanese BIP-39 diff --git a/crypto/proof_of_possession_test.go b/crypto/proof_of_possession_test.go index 5f292fc..1f65800 100644 --- a/crypto/proof_of_possession_test.go +++ b/crypto/proof_of_possession_test.go @@ -3,27 +3,30 @@ package crypto import ( "encoding/hex" "fmt" + "math/big" "strings" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + blst "github.com/supranational/blst/bindings/go" ) const ( popTestSecretKeyAHex = "67d53f170b908cabb9eb326c3c337762d59289a8fec79f7bc9254b584b73265c" popTestSecretKeyBHex = "3325023a5e4e0069558c5bd9eb7eca78b4f4c7711b9b231d9263a8edc33bc510" + popTestRegistrant = "0x75545540230d5c3BEf023202d23CB74cFA723376" popTestPassphrase = "peasant list dentist thrive guide uncle announce city energy artist basket divert stool glow eternal stove length gun action slice type labor aunt unlock" popTestExpectedPublicKeyA = "a7e75af9dd4d868a41ad2f5a5b021d653e31084261724fb40ae2f1b1c31c778d3b9464502d599cf6720723ec5c68b59d" - popTestExpectedProofA = "878ad02e1f215d40722bd77a0148adb8dfaad4514157600a0a926cfc58589fa4e79d3d4d579cc4149237b8100efdcff110dd2a251c52543539d499c8f24b142da66d1dc19ec44b3d9c3f71112b2705e5557f932a36bd9cd9b3544ab0d9e6a677" + popTestExpectedProofA = "a892e94d8ed6d0fe8792dcb31b7c5116a7d138ad4bbbd044780a7c314e86673e783850121dc34d0edfa2a2560c2f30a402f4fa5106ff71d5c69bc3027210ef90b3d3ae0a19ffc9f554b37aca72f3bb25788c3177514d94e041441ba9d029b3ba" popTestExpectedMnemonicPublicKey = "a3b93d0149c9e0ee8c2e734b641d313040b8901fcddbf61a018ae2a4633da49f9b169c0bb6653dee4cdd7dac2631a935" ) func TestBuildProofOfPossessionDiffersPerSecretKey(t *testing.T) { - a, err := BuildProofOfPossession(HexDecode(popTestSecretKeyAHex)) + a, err := BuildProofOfPossession(HexDecode(popTestSecretKeyAHex), popTestRegistrant) require.NoError(t, err) - b, err := BuildProofOfPossession(HexDecode(popTestSecretKeyBHex)) + b, err := BuildProofOfPossession(HexDecode(popTestSecretKeyBHex), popTestRegistrant) require.NoError(t, err) assert.NotEqual(t, a.PK, b.PK) @@ -31,13 +34,51 @@ func TestBuildProofOfPossessionDiffersPerSecretKey(t *testing.T) { } func TestBuildProofOfPossessionMatchesPinnedVector(t *testing.T) { - result, err := BuildProofOfPossession(HexDecode(popTestSecretKeyAHex)) + previous := CONFIG_NETWORK + SetNetwork(&Network{ChainId: 10_000}) + t.Cleanup(func() { SetNetwork(previous) }) + + result, err := BuildProofOfPossession(HexDecode(popTestSecretKeyAHex), popTestRegistrant) require.NoError(t, err) assert.Equal(t, popTestExpectedPublicKeyA, hex.EncodeToString(result.PK)) assert.Equal(t, popTestExpectedProofA, hex.EncodeToString(result.POP)) } +func TestBuildProofOfPossessionBindsChainIdAndRegistrant(t *testing.T) { + result, err := BuildProofOfPossession(HexDecode(popTestSecretKeyAHex), popTestRegistrant) + require.NoError(t, err) + + pk := new(blst.P1Affine).Uncompress(result.PK) + pop := new(blst.P2Affine).Uncompress(result.POP) + verifies := func(chainId int, registrant string) bool { + message := abiPadWordLeft(big.NewInt(int64(chainId)).Bytes()) + message = append(message, HexDecode(registrant[2:])...) + message = append(message, result.PK...) + return pop.Verify(true, pk, true, message, []byte(popDST)) + } + + chainId := GetNetwork().ChainId + assert.True(t, verifies(chainId, popTestRegistrant)) + assert.False(t, verifies(chainId+1, popTestRegistrant)) + assert.False(t, verifies(chainId, "0xBd6F65c58A46427AF4B257cBE231D0eD69eD5508")) +} + +func TestBuildProofOfPossessionRejectsInvalidRegistrant(t *testing.T) { + cases := map[string]string{ + "malformed": "0x1234", + "no 0x prefix": "75545540230d5c3BEf023202d23CB74cFA723376", + "wrong checksum": "0x75545540230d5c3bEf023202d23CB74cFA723376", + } + + for name, registrant := range cases { + t.Run(name, func(t *testing.T) { + _, err := BuildProofOfPossession(HexDecode(popTestSecretKeyAHex), registrant) + assert.ErrorIs(t, err, ErrInvalidProofOfPossession) + }) + } +} + func TestBuildProofOfPossessionRejectsInvalidSecretKeys(t *testing.T) { cases := map[string][]byte{ "31 bytes": make([]byte, 31), @@ -48,7 +89,7 @@ func TestBuildProofOfPossessionRejectsInvalidSecretKeys(t *testing.T) { for name, secretKeyBytes := range cases { t.Run(name, func(t *testing.T) { - _, err := BuildProofOfPossession(secretKeyBytes) + _, err := BuildProofOfPossession(secretKeyBytes, popTestRegistrant) assert.Error(t, err) }) } @@ -62,6 +103,9 @@ func TestFromMnemonicMultiLanguage(t *testing.T) { fixtures := GetBLSMultiLangKeysFixture() require.NotEmpty(t, fixtures) + previous := CONFIG_NETWORK + t.Cleanup(func() { SetNetwork(previous) }) + for lang, vectors := range fixtures { for i, vector := range vectors { t.Run(fmt.Sprintf("%s#%d", lang, i), func(t *testing.T) { @@ -70,7 +114,9 @@ func TestFromMnemonicMultiLanguage(t *testing.T) { assert.Equal(vector.ValidatorPrivateKey, hex.EncodeToString(DeriveBlsPrivateKey(vector.Mnemonic))) - result, err := FromMnemonic(vector.Mnemonic) + SetNetwork(&Network{ChainId: vector.ChainId}) + + result, err := FromMnemonic(vector.Mnemonic, vector.Address) require.NoError(err) assert.Equal(strings.TrimPrefix(vector.ValidatorPublicKey, "0x"), hex.EncodeToString(result.PK)) diff --git a/crypto/transaction_data_encoder.go b/crypto/transaction_data_encoder.go index 96b5f21..35e8c6b 100644 --- a/crypto/transaction_data_encoder.go +++ b/crypto/transaction_data_encoder.go @@ -14,16 +14,16 @@ func EncodeUnvoteData() []byte { return AbiEncodeFunctionCall(AbiSignatureUnvote) } -func EncodeValidatorRegistrationData(validatorPassphrase string) ([]byte, error) { - pop, err := FromMnemonic(validatorPassphrase) +func EncodeValidatorRegistrationData(validatorPassphrase string, registrantAddress string) ([]byte, error) { + pop, err := FromMnemonic(validatorPassphrase, registrantAddress) if err != nil { return nil, err } return AbiEncodeFunctionCall(AbiSignatureRegisterValidator, AbiBytes(pop.PK), AbiBytes(pop.POP)), nil } -func EncodeValidatorUpdateData(validatorPassphrase string) ([]byte, error) { - pop, err := FromMnemonic(validatorPassphrase) +func EncodeValidatorUpdateData(validatorPassphrase string, registrantAddress string) ([]byte, error) { + pop, err := FromMnemonic(validatorPassphrase, registrantAddress) if err != nil { return nil, err } diff --git a/crypto/transaction_data_encoder_test.go b/crypto/transaction_data_encoder_test.go index 27368db..d187fb4 100644 --- a/crypto/transaction_data_encoder_test.go +++ b/crypto/transaction_data_encoder_test.go @@ -32,7 +32,7 @@ func TestEncodeDataMatchesFixtures(t *testing.T) { require := require.New(t) fixture := GetTransactionFixture("validator_registration") - data, err := EncodeValidatorRegistrationData(validatorPassphraseFixture) + data, err := EncodeValidatorRegistrationData(validatorPassphraseFixture, validatorRegistrantFixture) require.NoError(err) assert.Equal(HexDecode(fixture.Data.Data), data) }) @@ -42,7 +42,7 @@ func TestEncodeDataMatchesFixtures(t *testing.T) { require := require.New(t) fixture := GetTransactionFixture("validator_update") - data, err := EncodeValidatorUpdateData(validatorPassphraseFixture) + data, err := EncodeValidatorUpdateData(validatorPassphraseFixture, validatorRegistrantFixture) require.NoError(err) assert.Equal(HexDecode(fixture.Data.Data), data) })