From a8995eec6bb85f150b63b8b027514b71776a20c5 Mon Sep 17 00:00:00 2001 From: Saeed Dadkhah Date: Wed, 7 Feb 2024 13:03:49 +0330 Subject: [PATCH] US-336: Update documentations. (#362) * Add zilliqa-rs * add scilla parser * Remove upgrade to v8 doc * Add GetNodeType doc. * Add two more api * Add verbose doc * truncate output * Add soft confirmed tx * add get-current-ds-comm * Add news page * fix news * Update supported eth endpoints * fmt * Add persistence addresses. * Add status * Add status * Add pyzil * add ethers.js * add ethers.js * fix errors * Add otterscan * Update docs/zilevm/developer-onboarding/hardhat.md Co-authored-by: Richard Watts <108257153+rrw-zilliqa@users.noreply.github.com> --------- Co-authored-by: Richard Watts <108257153+rrw-zilliqa@users.noreply.github.com> --- .../api-blockchain-get-current-ds-comm.md | 655 ++++++++++++++++++ .../api-blockchain-get-ds-block.md | 118 +++- .../api-blockchain-get-node-type.md | 49 ++ .../api-blockchain-get-num-peers.md | 45 ++ .../api-blockchain-get-sharding-structure.md | 45 ++ .../api-blockchain-get-total-coin-supply.md | 2 +- .../api-blockchain-get-tx-block.md | 130 +++- docs/api/introduction/api-endpoints.md | 21 +- .../api-transaction-get-soft-confirmed-tx.md | 63 ++ .../dev-tools-scillaparser.md | 65 ++ .../sdks/dev-tools-gozilliqa.md | 3 +- .../sdks/dev-tools-pyzil.md | 364 ++++++++++ .../developer-toolings/sdks/dev-tools-sdks.md | 4 + .../sdks/dev-tools-zilliqars.md | 342 +++++++++ .../getting-started/dev-started-env.md | 56 +- .../upgrade-notices/dev-upgrade-v8.md | 186 ----- docs/news/index.md | 13 + .../staking-phase11-notice.md | 1 - docs/zilevm/developer-onboarding/hardhat.md | 2 +- .../getting-started/zilevm-introduction.md | 11 + docs/zilevm/protocol/developer-rpc.md | 10 + .../docs/dev/dev-tools-zilliqars.md | 307 ++++++++ .../docs/dev/dev-upgrade-v8.md | 148 ---- .../staking/phase1/staking-phase11-notice.md | 3 +- .../newdocs/developer-portal/sidebars.js | 2 +- products/developer-portal/mkdocs.yml | 15 +- 26 files changed, 2262 insertions(+), 398 deletions(-) create mode 100644 docs/api/blockchain-related-methods/api-blockchain-get-current-ds-comm.md create mode 100644 docs/api/blockchain-related-methods/api-blockchain-get-node-type.md create mode 100644 docs/api/blockchain-related-methods/api-blockchain-get-num-peers.md create mode 100644 docs/api/blockchain-related-methods/api-blockchain-get-sharding-structure.md create mode 100644 docs/api/transaction-related-methods/api-transaction-get-soft-confirmed-tx.md create mode 100644 docs/developers/developer-toolings/dev-tools-scillaparser.md create mode 100644 docs/developers/developer-toolings/sdks/dev-tools-pyzil.md create mode 100644 docs/developers/developer-toolings/sdks/dev-tools-zilliqars.md delete mode 100644 docs/developers/upgrade-notices/dev-upgrade-v8.md create mode 100644 docs/news/index.md create mode 100644 needing-organisation/newdocs/developer-portal/docs/dev/dev-tools-zilliqars.md delete mode 100644 needing-organisation/newdocs/developer-portal/docs/dev/dev-upgrade-v8.md diff --git a/docs/api/blockchain-related-methods/api-blockchain-get-current-ds-comm.md b/docs/api/blockchain-related-methods/api-blockchain-get-current-ds-comm.md new file mode 100644 index 000000000..7f28ab65f --- /dev/null +++ b/docs/api/blockchain-related-methods/api-blockchain-get-current-ds-comm.md @@ -0,0 +1,655 @@ +--- +id: api-blockchain-get-current-ds-comm +title: GetCurrentDSComm +--- + +--- + +Gives information on the public keys of DS committee members. Also, returns a parameter indicating the number of dsguards in the network. + +### Example Request + +=== "cURL" + + ```shell + curl -d '{ + "id": "1", + "jsonrpc": "2.0", + "method": "GetCurrentDSComm", + "params": [""] + }' -H "Content-Type: application/json" -X POST "https://api.zilliqa.com/" + ``` + +### Example Response + +```json +{ + "id": "1", + "jsonrpc": "2.0", + "result": { + "CurrentDSEpoch": "35342", + "CurrentTxEpoch": "3534154", + "NumOfDSGuard": 420, + "dscomm": [ + "0x020035B739426374C5327A1224B986005297102E01C29656B8B086BF4B352C6CA9", + "0x0200834D709AD621785A90673F6011BC36ECF4CB13475237EAA2D4DEDAE7E9E554", + "0x02009A7997753BED9CC17435CBBEEAC52FACF575152FA738E98579FD22780A98B7", + "0x02011852D914FAE2B5FD0B58AFA90F2490AF374C661958A6376F0C20CE0E08F05B", + "0x02013D6697F5BEF5F65FB9A222AB58080DD2F471DAB9BF7A17664510512BFF8ED1", + "0x020177703339FDD3C56E3A5E4BAEDB253299C53BFC7A213679F9AD81ABA5BAB024", + "0x02017CACA3FCD088FAE478D3BDCDA443E4BE6B062F910CCD22D2937B35B6EBCDC7", + "0x02025543E056C090F74393C4B2E3655BB05931F63EE30623669051D96059BEF446", + "0x02028DAEA3E423C4DCBCAF42BCE5B6519B12B3B3229F62FCCB9C20495B69E6983E", + "0x0202D970B251DAE5FC44AE34F9A01269A1B2C96202693BE1809C3D7CCCDB653589", + "0x0202EE9193CDECEE54323EA75930A364C25E979B5806098255BC5142281379AFD4", + "0x020364471DFA532F0FD19CAC3932532D706515F4FCEC1B34DF524D65F39D0C5C3C", + "0x0203A26D667E94CF88C39EE1FBF697DBEC9CFB183DAE6180492070EE5E85CBA027", + "0x0204343FFEF98D8960AEDA600CAB2226221160F7E27E7882E3861AFC7A3BA744E1", + "0x0204376EDEB85BFB2D6C9F9C52C246958305846E3848C55B44CCA9531F5B411B47", + "0x02043E6A63CA1048E39BC113D38D0EA37BEB2BFD7EB0E92560556C7A7EFBD17003", + "0x02045A2256A82B10C29C16B8EF5CEF00AEE571E71F023AFD437BA766AC14F94030", + "0x02046141C396CEA62E9D1CE33BADF51A90FE418EC5EB1DC26F4DA26A36B1D7AE25", + "0x02048B330A32AA420A547442F80FD8C6CCFBEFCC1A6EC784C0B9E80372085DDD14", + "0x0204D5A9E32D12412DCAC740C11CBFE85555C3A22591BF733AF6E65C2A3E69F06D", + "0x02051A2EF65DC19363BE90595DDF76AC342ECACF82B95C8C00F67487F916A46789", + "0x020666F7885E5D75EB053BA4FC22726DA855C99B02EB377FAC6B260921F8FB63C4", + "0x02067DED254EEFCAD1ECEB12B35533856178CC6EC48AEDB5ABD7278103BBB49B20", + "0x0206B9C9B1DEBD139B1AC084C85823C81A33C03AE1BC22082B01E6D02042ACA132", + "0x0206E060B2DF64136051EC33CA582AB6C9CDD8D37A460BB696FA0905B7C11AC74C", + "0x0206E061A187F25C4AFDBE5821BCF240888A254B701253B20040CAEA511410AE5D", + "0x02076A832AB4D03BB3E8EB80D77C63F9181AF3BC20A6623EE124E36633497D6862", + "0x0207FF35CFA9F3D8336430BBD09BBF9B36C283358E8CA91FAB551ACB5FE1E38B68", + "0x020897163A6C54922EA6B3409A2222E1830666AAC43EC09009A549FDC799D53DDB", + "0x020917CD5BA6BFEBF1B08D3FA151E00D5519D250812C8C64AACD9371AD735A6884", + "0x0209289EC3EBC6AA8B52930C4767F21758D2F716FC1F4BBFE88A194E8371EDA79A", + "0x0209406A5A5B17BE0F3A19B7916FD588B14DDA3A8E8C225024C899FEB3E8E89C79", + "0x0209AC145F273A966521282DFAD1D03048B6FA8D6EAABDC05AB5633D98AEC4D0BC", + "0x0209FCBB20862B49B0283C54A9111BFC82DF327883088C4B7D4FFA24D532CA8573", + "0x020A15004E1A02DD3293A2D5AE8FCCEA3423DA0891146F008BFA18AA21F9382E41", + "0x020A647A0FBD7C869F205C4198851BDED6633A5143C4FB280AAB0D652710E65E63", + "0x020A740AC4186ECBE94DC664D19DDF1272459ADF5ADB7AB85FD347D96CC1104E58", + "0x020A7523DDF265475232770928FBB57D9B96040DA8A3E22CA93026BF19443D1356", + "0x020AAB905DD3CA869440DA76BABC897002CC940B804C2468197781141927488E47", + "0x020B6E4541A54AD123CB6D279F8719C19C36AC8638888678A83CE9326F45125437", + "0x020B77F87178D33CCDFF4DEE2DF866100C5975C644C4844402078A832752EA6552", + "0x020BA4B5F28C25494A23FCA05A9A867AB697775DA5827B5F8A4D29D8915D537806", + "0x020BB1B552E74D4E9B096F23994E37AA0E0E6A5A5DCC00BF7582AB69420565A7E9", + "0x020BE9F8C02132EF1AC5C759B7D17B53AC182EBF2D395438263CA27A11182BE700", + "0x020BF216B79DEDF6CE5AC414ACA71530C61FA06A966E0BCFB603AE8795E5E7E701", + "0x020C3C5415B450A3DACCAEAA8A9E45A8ED0A0DCF1E537155FD592DB09A67C89C12", + "0x020C76F15CCF356AC507416CEA8CC87ACA035250FEC49D396781E2F92BC7C48056", + "0x020CE7CF69397509048B8E1A2D7790374D69E4211386D6DCC1D14B161B7E5CE7A2", + "0x020DEF01F990010C432F61FC0C5B858B3F2E7685A7E660AA930783CCD476691BD5", + "0x020E0B6681FF22778B80B997CD8D9460B83785549F22D020F926B7FACCAF0C1C54", + "0x020E352980AC19E2F923582A52B091909DD0EDFAFBAD165485A8E74F9D7D804614", + "0x020E7E7DF1CF0E3DA6B4879CA0E1527EC09621711243536EC497AA43BBF8362DC5", + "0x020EF8E362E456EC4565AD0A00C43F1FBDE1DAF523FC66EDA68818BAD6782EB7F0", + "0x020F0BCC5A7597CF3962C3A8207B7C0AA31DD801F43E37C77BA24363E23946E46A", + "0x020F172817A4632A5F98D63E8828D8034D2D7D51A84B03A696F93DC12F491285F2", + "0x020F6A6B86C35C2FC9EF0E088E3BDB25B18638CCA1F50FE95DFCC9CCE8042C52D7", + "0x020FAA7260FF3D6E8EC2DD57E3E1C9284EAB686AAA57ED2E96376EEA6DB8411161", + "0x0210295D0955BBF700D7F863CE06A05D8D8CE7D53F0AB8E3D142C7A18F29185CCC", + "0x0210BCD6F0084D7018C40D007909FA01713DC61CF352FE09A7F684363321B9F5FE", + "0x0211CDC4EE0AC1D3EFBD9597C970A32F9B618E530DE24D0E3EA93D90F66712EB80", + "0x0211D4B543261321206DADEBC45840DC9D56C928918E644FD7ADA4B2F5A5541BD9", + "0x0211DB48707AEBF5BE67E0BDF74A22F605230EF084E2A20EBA073CE5CF2CB6CB3D", + "0x02121162B2769EE2C9B0C5E89F0DB3811EE6A1EF30CFC965F7BB20FFC4C3D11FA9", + "0x02127253E0BE43CD9F7ED948FDC52CC9F5761AEF266BB4A1983C729EAB5AD2B3EC", + "0x021273DDB6F647877955968EBE5EEE07F213AFA2418249086E475EBF41EDCE34AD", + "0x02129FAA327E8222AF53FB72951C77DC2C35AB97A00A6A00ABCDF6D261B745488E", + "0x0212C8309A2CE63C75F3099730A0FF851F8442EA94E48CBD100CC919BA7FD2AF1C", + "0x021305BB22D263DA9A3E76C325651F206CEE88CC7706226ADD6FDAC957F27DE998", + "0x02131F2BBD310407CE4DCE95FB2E71E88F6C9550FF940CD03FDBA99499C59862A8", + "0x02134CC19B594B1571916AABBA4475026D1B2021C19045CB2065E0D3B12706768E", + "0x021432AE4BFDCBC0B27FACEFEC3C8DDCA2C6ECC14DEB773ACB298C67DD5703EEA0", + "0x021496337EAD57A3EB03BD984333FE891BB09C9C8885B5D4EDD1E6B35DC980DCF8", + "0x0214A011B100371C45AF9EC47C842031B672142E800BC9EA8A85A16B2619D79520", + "0x0214A04F71C96E6014D32CEECC2FAD98662E6AB50664F0B13837857C2299A3DB46", + "0x0214CB94D01CCB01C33744CBAE00B42C606D09DE620D3A5F45C42FC6B2979490D1", + "0x021540B8DD756F612D07E6829498F4CD584743F03657B0F19B06B3D30FB6E4EA11", + "0x021557750D8A78CAF97B25CF9D1692CB23C2A6B12C61181EF65A6DD8893196329D", + "0x02165697894199614A2ADDA487417B202E7E7BDF6C7623D130FD1358866C91BDED", + "0x02167E9A1F7EB8A7B93A266C2BD08406E4F0BF911EB2AA3F81BCD20B80B3F32929", + "0x0216D19383BCFAAE54D13146431E1DEA20263D48C9300480A8A0E178A32F13D1D4", + "0x021740FE9FBB9B6CA3CA6C04C552D951B0C1EBF07DE7EA9F94D9D1270488D3D1FD", + "0x021794E902540F93B8EAEC46765BC8B981FCF2023CE472284EB1CCB25029EDD5BE", + "0x0217B3DCCEE0EBE9E84B59C5E0268238BA83C0BD4CF0705341FC6D45823373231C", + "0x0217C35FE119EB40CCBD0C0E6D83A849364803CC4EAC3C168D7723F436196EBD70", + "0x02183E7A1245CF7190A7E91F1C3C7545D3B077767A1D6062B35B3FA2D7292D4409", + "0x02184D5A1DAD376EB166406A9A4EE1AAE95C5C5E6A985EBC7B2667DD5A40B1FD70", + "0x02186651B9BA32FA4151ABB4F65F2824663620AC3A267D63B34E767163D79FF460", + "0x02193172419668F3A281BDA4F2AA72D2C198C2E68CED482655107E399C64858060", + "0x0219426E244A1CA0E24F9640282294702753A80CB5350DB09CC71E886944EF2CBB", + "0x0219A0209081BB1ECCD0D0B6636B214898129B6AE0D6E2A481B6769457E6D09EC7", + "0x0219B84F1F12E5235BF1CDA37D540255DB8037845C7010650550C14F9015321687", + "0x021A1AF75EAAFDA2BDAF5630317413402D65D4D6F9CB2CA9A7A941191453974DB1", + "0x021A1C6464CC0D68992518CEEA879886279B14FA0013525F4E93CB45F0E02F445B", + "0x021A6312D810BF060A945320DBFDAF758411EE4334FF98A4B15233580AD3A853F0", + "0x021AA136073E8898E9A30BD0DD101840E134B5A506A85181DAB27BDB5F9E9D9B47", + "0x021AE60ED7955AF111F430CAE35F7B413ECCB7901601957C635FC82B91A478D7A4", + "0x021AF7FCC4D8268540985C2154616BFCD511E02612742E7EB7F2AB23A9C4CE7EC6", + "0x021AFF1103DE463E34AAF6D2E0CBBE5F4C30E6D6D6FF72439B2142BF7651097744", + "0x021B0C1EEA157A95BD16F1B48E8B53D18FFCC232966C79F06A82BDDC5BBB7DC629", + "0x021B4372D109DF2EED24F26853103CCE25D55352A8804A3CDA1470BA102C38C2E8", + "0x021BE9B282F7C6BB149B0C5EE5FFE99997A6C6BD9F7AD8606D93EF66AF86012F4B", + "0x021BF2F79E1CC67AD75B138B132C47677FC034B5A2F181482C92EC2E055D348F5E", + "0x021C03378FD496346FC297453FFB795CAEED687ED9EA34985FDFA9ABF5C6A7AE25", + "0x021C42AE2F56C7795B8AB9BA74FFA60708336BE5DC052CA6B1AB3DF08DE9D0F4F6", + "0x021C88F444FE09ADDB34717598A51597394BA3A2A87FD8DF2E99347ED715544823", + "0x021CD0817974B70014091001A40770694EEFA559171D7DDA3E684D5365E792F89A", + "0x021CD65352B4A3DB0ECAB52DDF1A27060D07118DC5B447C4538E07B490B1D153AF", + "0x021D26C18589C50CF297AF2F3F52BB95DCA7F6746C87909485FFAE9E94829D389B", + "0x021D415000DCE558465BA560757170A220BCCD55FFD167DFA6FBD3B67090618F75", + "0x021DF8C61DEBCEEFF80BB6F4CEB53065EB569325055E4D002B9B0F5D9D15E0948D", + "0x021DFA1672FB671881F7F4760629A7A21D226256094332F490EC98526B839CE9AF", + "0x021E16BD746C74A824622202CB08C9F322E27E45BFD4ACD9888B1E4D0EA1CEA7A4", + "0x021E206C6C57545AE92002405D83C21192B3D4F30113663DC221D1FA4C3FA31F05", + "0x021E871CC759ABE82B1A1A4BC1ED8C9AE439F06B71EBEC2685A5A8DBD1AA5DADEF", + "0x021EE3299BB7262DB4CA451009167D700DF7D39C715FDCF26DCF5CA430C62D9D07", + "0x021F05DE8E8197EB2378C997998EB8B032F791DDC5E0900F77CD94F9902631FBE8", + "0x021F412F69C8481E46A80285CEFCEEAB90D84E1F051ECF22EE4EE7CB4904BDACB7", + "0x021F85F2113F493C05B0ABD208EFF24D9A79311D9364E7C11E15E21B12F9F25C38", + "0x02200110534969817A2A7EF6CB506800CAFCBEE89389190115C1A9363F04F4978B", + "0x022025B08AA8D2DA052D3E58F1FA362CAA8354E886D852E4FDCFB86FA720C6C97A", + "0x02204A1B77B9570A73191B5D711C3DD16941C585BE03BD8FCB5A3513E4B1F427A8", + "0x02205FB5CB5CBEFB73E3CC58448DE2A5AC2BE8F26A184627B73C0DB83AB7BAA317", + "0x0220A02324910C53F42F596DC59E6B2959DC1A7360A18BD95FB0F59B26F8C8E71A", + "0x0220C0FCB42F957108EB9138B45E0DEE44911AD246A041CF427EB714194A6E5EF8", + "0x0220D31E50B30ED49AAFFAB8800294D4531E24443C4317BCDE50DF1E9B57AB499E", + "0x0220F9600CA338ADE62D16EA51CD43042E72C90F008702091D0E67B4CDF435889A", + "0x02214E5CE6E9540D964CD842E53B527BDD719683D2083514339927C04F811B3F40", + "0x02218695384A1DC0F9B020C6E6B16E7775C0F0FC490F7BF42E5749583FDDE94C7C", + "0x0221C6F96E9837A3DBAB707A5F7A5188E45CBCDBCB1718F9DD182A61C7D6E450D8", + "0x0222175E3DFBD2AB68D464ECB0E342560DDF9DD94631937451F94114789322CBA3", + "0x02222064FC1A80BD9D228D411EBF48FE1B5703822846BB07C0FA9ECB65A4294A6A", + "0x022226B1DDC140954C69FF2BDC6CF6F02FE08DBD5FADFE80DC2F57406EF79F0640", + "0x02224778929DB45C88B1BE8D0AE080CA0E8400EECD2136F05579555DCA9BF90D62", + "0x02225D25504F0BF70AD27EFC9E10A1149D38B2F84BD73E634AD48621F571BE3D02", + "0x0223CAF179F5CA946BFAFD170721630CE970A7187D3C9F4AE492EE544A627CD113", + "0x0223DE56FBCFAB6B306E4D8775DCB50A6B7EB09AFF88072EBDE6E5141E90AE042D", + "0x0223E276FFF18295630C6C41BE9565DDC8E41B3B3E6E79CA1A6699616AD2C756AF", + "0x0224AFEC66426898ADF200C754898B2643C716770B26926497C48614EDC414B5F7", + "0x0225467CABD782C9CC2A5847891CB9D58F66DAD724F4BA4FA701E98FF9C5B2E680", + "0x02255246AA8D72AF6C4323B4F6AA75B4C6F9C51CAE5E1F68361C8A800DF8871EEA", + "0x02258008B85E0F64F5971FC75B69B0297FE02A5010EBB3A43F8B64FEAAC29C56AE", + "0x02262800246052BE04297B07871A5E34D72ECEB38AD1575517FC6F42736A4898FD", + "0x02267BCF354D13FAF99397542E806CC207231AAEF0437E5C66272EA2D5B289452C", + "0x022699248C7DD0E438196E46830103A4216E159E10C38BDE87E62959908D5EA083", + "0x0226B4395E1619D096FDDBE7F7EC0B295869C460BB2733DF8F5B0AF929BEA015FD", + "0x0226B8130B46C07EA73902930C7C22B7DCB3BFF6D80BA565102B35B3DE8E29292B", + "0x0226DDB0165A50CF0357B19FCE71BFF0029D8BC39E513851F00A084E57166C691C", + "0x0227909FCC701F9390A8C0888C98D14697E4901A7FAC395B0D6DDE6C5BBE47CBC1", + "0x0227939F72067FE1AC79276CE779A27C560391A660D42FDE0102229964F1C2C511", + "0x0227C63653018A3F22397819D6E2EECDC84DE50967AC6B84E6C365A996028CF56C", + "0x0227CECBB7A3FA69AF673599F6034D1A3580C70725C62CF828510D695A0E6A3595", + "0x0227EC27AAD4028124F1D92CA0274BB3C2E52357EC06323E0F1C067B04E2838B7D", + "0x02282F48BAC96F04A9CCC81BFD2B7AE8B180F0255DB7483876290FBB643D7B38C3", + "0x0228E92D39A82F912A36A598133FE41862ED7FAD5F23F54BCFEEDDCE8686BA15A3", + "0x022962570E2E763CECF1EC49A8C8C83E3513AB8EC0B08BCF0088B3240459D58271", + "0x022A749304BDDC9C7B6303D498006728C271B4DE7A02EC97CACB4F28BF4CFA3D06", + "0x022AEDD9963B4CD41C2024023DF70419B62A1B3108E4FA80A408B23B298076C0C2", + "0x022B609F5E8386BA8AFD0FC63F4732C0031D6395665CE60D3A8DA0748DAB6537F1", + "0x022BB400E23FB4EA7652E0AA93A09E179CCD3C84831B4FDC16E948502AAEB4A140", + "0x022BE3926543EF5D3E4C19EDDA60B629B36E79017C8B25F9045E2A545D9CB9212A", + "0x022C13CA7F4C16C7A96EFA543990DA7694E5AF093D580AC66D18B927C476F68F36", + "0x022C1F6D02B186A3BE66516049140A8621BEC8860638A72527849627276D6C7859", + "0x022C7AEA187B40A551C5F542438A857CB57C10DE1BA6144775F6ED474C4712B4EE", + "0x022CF7B077D28BE8808976E74164E2357E197056846A5051A689BE0E9FF6146F46", + "0x022D0EB26683484B2C1679FF73BE1A0CBA78E099EB96F0E3942298F21129330778", + "0x022D3DC0596915C4746D7706A6BB24F4F07D06CCCA5BAF278C0122D90376928F6F", + "0x022D6586AAA7770D6ABC4DB4FC98324982DA01810D3E0FA346BEAC83B62AC2C4E3", + "0x022D915BCD93019D7D7B97F205939784FA2DA54DFB0975542B33063E2100E0E8D4", + "0x022DCF24D4D34F19895D54C42EBAE0B86F81AF586A599CA85CC8067BD5ABA9141E", + "0x022E9DC04E261C5AACB30A8E3A6BF4C2E64EB8E40E454788FAB6CC86AD4897842F", + "0x022F1BABF72A1C22C197880685E51F4750015B118D1196EB37E33B31AF34A3677F", + "0x022F689FDBAE20449FF7716587A508597EB8C312AE336970733AD006AB77BCBD2D", + "0x022F8B765CA84033F3881DEEBFF6A2F862704CA67282ACA705EFAB492D00A84262", + "0x022FBD0D66CD14E4EC099436DF290CBEDDBB5BBF8B8FD76E89870C5BCD16991091", + "0x02304ABF1E43F64B6AB36FF047FFCA3195575122D4239998FF84CEC2379A83AD74", + "0x0230972802890E35DB4B7EB43FD4F3E1A09D856E1D63B4B2D3CD1DC92D8C2E0505", + "0x02309E626EC4BCF004078E60C4114D892BF29BF833C98027372C5B437D8067456E", + "0x023110CF5B8DF70652A3E97F370E35184FC2147736B6187FB409FAC6BB7FF20CDD", + "0x02312A58E603F121F08358EEDF55CAD235E52F4CF43175A43DC277F837EE1F2F4D", + "0x0231BA2C9A053A1B740AE9FAB49362D41928CAD9D4136C7E3E050B4E135B836F0D", + "0x0231F045306B5543EC124F0B1AF1BBA08ADEFA5C193583A8F7B189041FE0372BF7", + "0x02321FFFF22B18F92E9E18C58C5EFEA50198DF0062E41180B8201C46903A5F6DB2", + "0x023241CE9BD397AFA97ED9B46DB60F3F4D3F39B6816098AA91B16D4374CAF0DB9E", + "0x0232554823B6D75A5F00426273913AD55B0D042454D5103AB11CDC3C5C50EA4E8A", + "0x02328A6B6096BDAFC9572DF8D97059D00AB54E3760BDA0DA6A6F1C3958363DB1FF", + "0x0232AA0673A0EDF1E02EB02D982CF0B13EF0CFB4585CFC3C3DA3D59CB3A1B8E9D6", + "0x0232D6055FF1E76F571DD5A03BABBBBE2DCE01D3795674EAA67604EE98555D8D17", + "0x0232DDAF647E6D314073C7652D09609927E0A661525DA1B2BAA4F563F7CCC2D9DB", + "0x023304B4BF1BFB91CC416B161EE9EF0AB2549CBED9BECBFC1CBA576805051481C1", + "0x0233CECC9B2A5CBEA9DC189A1C532F1A548602151E01926CC3A832D6B4F75699B8", + "0x0233D6CD4E609918A9966284627675D0752F75EFA2A922540ACAB2936637006347", + "0x02340097AD16007784C8BE83E41E002BF0C94F523CCD1323230C2D4DE48186FDBD", + "0x0234911461938D461358746009FD13CD757A25FF151F23F39FF5BA3222812A34C8", + "0x0234B496BECF2A3F2EB4B6C23FB96A945B775D2006F5D67EEC6BD3579450837D93", + "0x0235090783D4DBDD4F7A4F283396F8C14FFCD4EE62BCA2A61055DDBEDFC597F1E3", + "0x02363477F424F03DA5EC5D04392D79FF0A20D895E9830B78055843E1313236B7BB", + "0x02364A8D8D9B19E51B13FD03BF90046B9B0659B74E5939222B4AD647E888487FFD", + "0x02364F25C7BE4C37D6FE20C0A6F31150007A1B6059E68E474BADE19E9251206C7B", + "0x02364FF0397B5F835C7CED689598A8C5BC9967085806839A5AAF9199D10D6DD707", + "0x0236E1040AADD29E56E5ABC14510BD880D7A29B941B69E2648C2BEF331AD60C2EA", + "0x0237893C019ABA84C26BE01CA14D3128FDBA4C61C57C40BA2F7BA198B21CE4DB58", + "0x023790FC7E8BBD7FFA897D20918CC1839372DD073F978CE62092B3653BE43202FF", + "0x02382624966FCFDB95CDD244B9863CDDB992F9E825FB41F3AC5EB6649A6928B8D7", + "0x02384A636AC52D03A5E2C6A75D9397084BEB7D72222CF89AC0DA4BF2164A3ACA10", + "0x0238615626987E28D8BFD203F17FEE1BB00999C966F97FF23F2207D470817BCE5A", + "0x023867868E084A578AFE9406AC6E3490EE6B0B18F035803EF7095335AA1C8F4588", + "0x02388BBA2C194AE107211A6540D372B499292C04865A5C8E4F009191D3C7933501", + "0x0238A98ADB44255DC26DBA3BD2BE49E2BAC34F051D6A180B7B54DF6672335DD9F4", + "0x0238F1986C4DFECED72847B15906443CBF56BC7EA43E9B9D1BC75962FE2696C2D4", + "0x02391D8F389FC2AFFA7387131D7A59818E6C710F436DDCDB8F8B257A7C5B03845B", + "0x02393D38E48D95B55B31FB8EF6FC736067CAB1E95AF4AC88B6521E4E95EBEF47EA", + "0x0239CC96A568DC91F00A0EDD97DFCB839D5BFE507859DBB8B6393044CBFF56B45E", + "0x023A36C6CD725FC25A87329CE675BB3169024454EC55425D3586F631BEFF6150BD", + "0x023A3799936B5EF6BB446D949A4831DA1663973BB2CCE6597D0F8F89E9B67A0CD5", + "0x023A549CDE37B2FF5CAB3021958ACA90358BE2760DDA25034E8AFF36E4155623C9", + "0x023A83CFED1E3C5D6CFA8A49CF3C978E5BE2AC26E7B83EC5034B1FDB59FD6A0CFB", + "0x023ABEC6465F5F41B1F4B6461A44C062E7C89A250505A442C9AE1C898CAA94A596", + "0x023ADA3D691154E002FC323445064223596D5AED2A1E53BFDE239CBE23C1F6FB89", + "0x023AFD151C2A4705D8461FCBB8BDBE191F2F440FA242BD1E850A88B9AF64E4902C", + "0x023B00E013273D613201DB5D0132BF91091D80D01085237BF70D38AC76A1CB7B98", + "0x023BBE50EA0AA13B39F82C687C78CB2AEC6D614DCE8BA0633075BB222EC0324ACA", + "0x023BBFD9C3A3EA1A21344FEBF49B7FC92EDB67DD2E93CAFE9CA448E0707D6C0723", + "0x023C42754F04732DD26351B45B9A0E3A700DC673DD2D615E5910AD711F4B4E52E3", + "0x023C6D72A764A43A86555D4E9E79134AE054971D0C4D21B846B96615299A5030F8", + "0x023CA040E3E4C753E34FB67D23FF92152ED988D58C4BB63BC4C70EFD8397201237", + "0x023D027AF794B7F8690C91E101988DA6C81CDFFB7D9BFA314542ABA76D2124AFF5", + "0x023D0BE6BE75A14BDE13A120D8F55F47F7BAB7C6B9BB990936FF58A5121EF5BF80", + "0x023D4D0DFF8EE0749717685163DB6F929D911F29A674E01ECFEF201F225D16BB0A", + "0x023E3F78820F0B68B7B6AD9DE5B1F92909F6380FF02F885917D96583BBB47CD4D0", + "0x023E8852F2157E976EA1B98D5BD528FF4E31EE6A41FF1352470D29D24C7BCE2E6E", + "0x023EB2779736A01E1313403BAF2FFC871BC03100D4270032C8A62FA39174352413", + "0x023ED92651C91B27AE8CC04AE87B6345CD7669404F4EEA23D57155F08EB013C248", + "0x023EFDD68B573C9DA92A5F795C8DC9B771DE1A24DC075503803A15822E79AC8C76", + "0x023F94E6283889C1FB383D9F673DA8772DA2CDA386812B84290C181003A70A0436", + "0x023FC07C0BBACCF186C9DBD328FE2A364AD826ACA3CD3DF597DC0AA8F7FFBF1A77", + "0x024000682EBF777F0C6A5B23C026A539282DD6F7D7756652D3745C817567410945", + "0x02400267E100EE572E28A1BF2DDBBE797219513595263B4851D95BB8D0E973C133", + "0x02407D36744829E8286F11D2AE93943F5A49DB54E2C06B64C92F1A35333CAF74F2", + "0x0240B64C7B937ED5DDFAA18663A7785065DCBCF17A501D2EE7906352F323A0D0A0", + "0x0240F43C59EA0A449BC08AF352A8AE91C69AB7850DA9F6FD67EF23E5D6B83DEF70", + "0x024156F620F62C22FABF2EF76D3B07A6EE0DEFC8C75544C08DAE194825A6665F2E", + "0x0241663BCA573AC37C0722587FACF3E2ED745C9BA5BAD36401BDF35951256FF0CF", + "0x0241C3C7676A001196C952F10FE51B4F3344E8495FC94E920B9CE27564E583DCC6", + "0x0241C839A5C219F7B03C1521456C124F1524B35E901E10B2CA92482307B06A9876", + "0x0241FD5ED053830F7B847C733CC03F8C3626253E6DE3DAB7718A5C5F5961524030", + "0x02425F73EDB1F529272DD6C3BB5CD25CCBC9C693AAF49759CD8FDB4CD04F4CAA4D", + "0x02426EC8956CD7A248760F635C00F879D77623C0778A32E7546A8050A81419BABE", + "0x02428404FE62BCC144AEE915E75AEBCEDB553E39D8FF4CF93BB0B7E6822296300A", + "0x024289C586E3D43250A7D3F53CDA16A940748F10C8FD419A214C2BF673DD1F0927", + "0x0243725BE27D735DC9FF74CE7BCBF82E357C0EAF7ED719B0383A365E7BE45C8DA2", + "0x02438F260717701BAE57C6297E9FAF9B2340A47A390D783A0D8EE41B6C5157BDE9", + "0x0243A35EA6458110CA7933505E3512883E416384EB1E19CA72667EFC130B14EF2D", + "0x0243EE8A2F24B0D8FE434D4F19376EC8C4E1EFFAAA850275691866581F727BC1F5", + "0x02447B927A1EE2987E1B17A63D20F8DBC17571D7A7EF37D185B941863C07D1BD2D", + "0x0244C8AF54F62D0A3BA5CCF4D38A8080CE74F9A20B30DF2B765EEB69F4FB15A5AD", + "0x024534AD065636C71DB7C7B95FEF1480F79B52123120BC6D7BE23B86C4B595066F", + "0x0245A6BFCEAFFD9C2FF79A89105819EA9CCC134FFBAD4357B64DC680EEAD2A9FB1", + "0x0246012289D96781C8EA77E9B498962D8DA85CCE672A7E279AEFCB91F522C3EE68", + "0x02466DFBF7444392D583E360E253935961245ACBF0D10744BC1F1F44CB0DBD080F", + "0x02470658E71A09E59031C8CB48117332FAD4DF2896E3E3DC799F6933AB458E7B02", + "0x024733E74BF855D0E0A50F2F599601DCF0BBA97FD622FDC42F0F08E93D523BB978", + "0x02477174B5A4356134F2D03553E383A1BA0D3D7B832437CEB18FE3BC2BFA467CC4", + "0x0247A6A97FCB9036916D49F42CA3FD2DE9FA01348D70F41A4B2809091948B75B52", + "0x0247D4283FB2304C397EF6E8DF6ABB047BAEAC8F195A6091D5424F07538B61D8F7", + "0x0248982A97314ADDA4B541A9DD2225CCDFC8B32002D207D355D77E3EB12AD9C581", + "0x0248A4975599D9CB3847BE46C99215E5FD9CCEB8FD81492D678C2071482AD11A21", + "0x0248AED6C9339F65FD6B361C4CB60473D97BDCFDF02AF1357908D8AEF7970E36C2", + "0x0248DFBB052B171F4BB96E86F1F567E1F7EC39A909286A570E20E6A09AF21A920B", + "0x024928D5768A33CF25A06FD40AB879D72A8021F9F1C811E4678F6CFA522A1D4318", + "0x02493616EF5B1176D799F732A5C067540BEAC0F195FBE25C97C841C3E14D6E9103", + "0x0249503872903EE4AD429940690BEF49547358E276E90BD46CD7BD15DFF4D306D2", + "0x024976B195BDD60E311641FD6024C3E4B64C5DD67B763765144D98ED8686627984", + "0x0249D827AA8227AE3C4D971365A1FD97F7E6770243DA77D964BE029E3BD97896F8", + "0x024A26BC7A0DCF8136E3A30A5DD68FB1A81C77C128AF25B9C29B1E67BF94F94787", + "0x024B91CD405ADBA2A376363D55728B6F39D90D6E15D0EF62682692802921983339", + "0x024BEA73D8AD09546FED116E21B481A9C7FE84637CAB8DEB377D0134A546F14047", + "0x024C066EBDAA57F6C43E55693B0BB2805147B7FD91C71CF85E0CD7ABC2FA6D0047", + "0x024C06B5CC80833018AB7034B0AA7D09409FE2C56BFE5E42F6BF0323A7AB3BE1E6", + "0x024C159862D2648AB66508DFE82A439EDDABFA65046004B2E93C0FF93B4C7FA80D", + "0x024C7DB29EDBE31B5CECC97C1F08470F1D0443543F14E9028C0C3DD9468ADFEEDA", + "0x024CC3275D499F904B6D6783FE92CB35C7CF4ADC94E6B087AB276267F03AA64290", + "0x024CDF3F29049076056C3784026F6D24F5173F4E1AF6C6F28CCCB7846844338C83", + "0x024D0A878905C6A84FEFDED89D8267019B9EE019172DE37BAF24F5EBEE43F5D5E8", + "0x024D3CA95C9F6B392287C421DF511B16E64E366769B96725B6F3FBAB5A2D6043D9", + "0x024D53A12EBDDE85AE5039A39596E1FBBD5BD944A3F9D43FD6308009BD268061EF", + "0x024DA00A0D82223FF98CD237E2D9BAA2C53504D0F21C740C4270A2359AA89BAFAB", + "0x024DC93610EE5298D5F2905A85E3773F5CD77F2415C7219A6661932803516A5D44", + "0x024DF05B15F189AB00DC70D962969D175543A0BD6EE3FF2949BE15C190A8C4893B", + "0x024E02E4571E6FAEBEC79B79B6ADC82B52C5D1961D84A2CF9ECFEF219AD24E8875", + "0x024E5147233EF7640E46740907537B1639B9D27C0647277314B0179E8549EA6326", + "0x024F444F96DE7CEED8D0BE7964AEE371BB42EC0704CE0BBFF8ABA222D1E4C9A329", + "0x024F5B39161611AB61ABE4E6287AA5C1FBD0EFBAB0C7F67B15AF3334A330EB3012", + "0x02500A9C191AE25724D4C5C9BDC68FE84F7C2614A9186B41713F377321312035EF", + "0x025013E5D12A0597CBBCF4A2F1FD911F38FB35E4B4F83A84702A326EA96097E4B5", + "0x02508B09C6D155BD03E56AACA46C3D10591284A0A38726942E434D9E43EA2679FA", + "0x0250CE859D5702BB57FA05C928BEF5345195034EDED01F10D23E269B3BEA0A1F41", + "0x0251431BA8A396CED2953856198B577CBBB339B9491532CC5A94630E1EE7E9EEE3", + "0x02518F0AAB1A1FCBB907152B55F6F39E7969CF3362B9B7E1F3636F8A8B5ACB48B9", + "0x0251EB33CB42B516C7EEA1391FB8394855A545D098E9D474BC964F69658F420BFA", + "0x02520FD0AE55D2ECFB9CDD5C8BF19788A7700EBC14510C3396F731DB5ABDD6BF22", + "0x02527A20154AF9267D481D83404ECA7303F87F7FB94666A4EADE6DFC04B7F72167", + "0x025283CD1C2B3CE3905CE15BC4A992E20A1587CE4AA145E9D89EBF56B9E1C4DD55", + "0x0252FFAA00AD8A3C91F40C4EA3AF2CFEA05E6C9FBF0296F7140F62F088BA5570F5", + "0x0253C627AF4B438C951B8B5D142CB56AAAB83FD3BEE21940C1F5A11A8A84AE7945", + "0x0253E6227C6975F16261D2C5AAC127E7F33A6FA9A22E7FB04EE823499BD7715432", + "0x025401717256A32BC21264DAF9288ECC3F5125063ECD41413894FDD736B1661F81", + "0x02541D7DCDF5C43C465A9FC3C039E3BE9A46FF14E60CC68BF980FA87FE8D842CE0", + "0x02545402B1D5BCADDAEF278FAEF5FD926C6917A5CB3E17FC838F863ED041B88F5A", + "0x02545D0B3E09842345F7DB0CCC8E46EA13DECD2FDE3908F1AB0B4FC31FE3162C29", + "0x0255164E412E0657F21A8766A9C7FACBC60565857F7625A506CC26D5F3BD33EEB2", + "0x02552F187A5827D6123BEEF75D1F6DAC9A86794FE4BCAC82897FE21938644D6741", + "0x0255463B570805507982056AAD3A3AFF82C67C30177147586CB89C84132082B667", + "0x0255D1855278F124921A7BB05CAC59CE3124BFA93D68854B2DB8E698439EAA90AC", + "0x0256014439E5F4A25A85616BF5167F6C9F769F62FF8CABD373FA95532EB354A556", + "0x0256402270E76D23AEDAE0497CFEE9EAD5E6828347E4D3DF0CC755AEF33874E43E", + "0x0256C0A8EBC8F3BFFBDA92C7A0B7ABA6E82DEB7200548161FB516DA305AF045D00", + "0x0256F7AB23ADC4858153EC6109D34E73458431CC808894414279741DC069CCA0DF", + "0x025754B920612474972F621747D23A54079DA31D0DCC041E0DEAEA44E050EE601F", + "0x02575A73999251B6DBD25FBCADDC1B9409E11CFA36325F866CFC0089FA74D1872D", + "0x025772842246AB82BC0F7C00B708EE2CCEA074A0DFBC8720402CA12FA864381FE7", + "0x0257A05BA525AA1D94D31CB17918F2452AF10514E753DD857A6A91547CDB70D1B6", + "0x025841E5EA673E2A6C6C3A93D79B063FBD14E0FC5BDAD57CEC3EFA2DA21E4923DF", + "0x0258480FD1B8D28F9605555202006CAD0A38B9E0DDBE4D301F86B0CC29B2B3F1B1", + "0x02586A3A1B917CE20EAD0FEBE69DB5E5D938361E2B329CC3CB250609945129606B", + "0x0258E259E506A9D5CC43124DD41AF882845663B7CE84A63E73FE1D284438FD6C76", + "0x02591DA7B93955B623C9478E5322FA489C267EA711FD07CDCEA61F5575973EBB89", + "0x02592097AD37F5B470525B55A33594266F18633BE4179E968629C06EF6C1DBF7AE", + "0x0259984570186C10E349682FBF0B5B0F6E5D3C17B63B3206F609B565D0876115EF", + "0x0259A3A0C03FF7ECACAB8300D2DD931547ECC3008A9C257BB54B8B4DC278368767", + "0x0259BFA8E68A79E0651F5A01100502AADDCFE471446435680C189F78BD3B5C6C9F", + "0x0259F0A8AE5CB0214DC16E2E485119F4AF99347176C14C1028B973EAD1C9CA4B4E", + "0x025A2E15C4C0F14EAB091AE471CEE9DDA9A1F3321623217802587AD48950C93F4F", + "0x025A4C504F7C4C9665C4F21B03F3D4EF6D33BA8D46D72A4725B883E159ABDB3C47", + "0x025A5D90641E09B20554CFA3CB1513894DBFBBA17729A122EA1CD4E4438D29D14D", + "0x025A69D6528C039EDD3680654982F08E5E640D5CD29610B84CEFFBA9DCDEF236DE", + "0x025B8FD2BA9C2C741F67950D61C406E13443E5B5AE11A22D7ACA92CAC806118E8C", + "0x025B9DAD8BF897F20F02E6116CCB722D15B8037994FF048CEA095C363732F80D57", + "0x025BBC3243615E17CD30D7EF21A4362DE5600740BF6FF7815BAA04C905C7FB176C", + "0x025BC214117EFC10918AB103AFCB4E063EB9A94B6B838BE58D8F606EE1D95DBE9B", + "0x025C6FEC457F4FDA89D7980745B1FCBC1E488C7FE735696571B2F1718FE8D66197", + "0x025CA4D4D18AE9A3676D320D3DC4589F49A6416E440B6ACACFA613F4B9EEC5BB47", + "0x025CB0B1F2121745D386F14733B03B59F27E09DB157F24131E687F9FF5E6A013AF", + "0x025D2930EE68E3EAF6F4948ADF005CFDA5A3D1D2D466577013A618511CAD268C61", + "0x025D3BCF72C89D55586DA2A45D1658A9634B5079910B09F07B1455054BD691D27A", + "0x025D4CA259460DCF3A4D857F9886161B5D1997047DFA85447ECB6574C9B6C100E8", + "0x025D88B2990723907D61558FE057A52C3BDF6EBA15BB782947AC849B2B5A38914E", + "0x025D94578FB7882EBC3EC669886CED7A56C3C1884FBC950BC0863909D83DAC1708", + "0x025D96D6F76A7C7003EACEF9ED52CDC002B657B95D944A653006EBBB8BA599857F", + "0x025DD38448621065BB5FDF56287DE9AA04876B19CED611F0325331104515101A87", + "0x025E3D8F94CAE6E9A28F7935C449AA013462C223D1EE43C15E41BAB91FE3AFED64", + "0x025E8A901F6A1B7ED8CDDB869DCE9733A7823581BDEF0D99C357D5AE147D23237A", + "0x025F402FF4FB09E5529678C5698B518C7BC1F150E7D0CC081A8374982B90834DDA", + "0x026100807AA1CD6A09B8EFEC2E9D1469D7CF8A5E66714D6CADE3798585514CBD82", + "0x02612E34015ACE7E493E26E800D5AE3399AF31DC1F0A55B2B0352543ED0478703A", + "0x026167C10F133A92F2E5A4D65EBB4881C3BD49B2F9E11F1C1AB847D347BC3C4905", + "0x02617E0C363CCD275B32ED5FC7EA14C586E7212FB75F6F17D5B101CE1650E75378", + "0x02617F9DF67672A6E56869C36FA89A6396F7293BFFA66ADFB794B3F1763BACE949", + "0x0261991E5D2FF8385AC5264B8698983ADCD3DC2CF6F33670B637DA74FA172754F2", + "0x02629CB28378EBD6B546B402113643C087A24DAC2C694637E248CBD0DF6BAE1276", + "0x0262B38989113EAA0163932D4A5AC068C1EEA624BF95D801ADC05C0A7FD5BEB42A", + "0x02631C794CFE2660600B5C2BD6D7A5F462AD798429606CA0880595A26142E8BF81", + "0x0263C2F7C0CB3B8389660B96780860386E08C29E106A8762B43618C77DF443805D", + "0x0263DBE43C70EEF95F0914648F96A8EA13631D9923587EC19E7A4816D9D89F1582", + "0x02641DCE94EFD43CB8EA790FA3D4472901BE7E09E4C1437C3CCB76C0E00CDB092F", + "0x026420EE27EF7CF385BD18AD72C39EBA94B7F84D20247A17E4D4722D5CA248CC39", + "0x02644CD85EB416B7BB87C21C8185B3B23751B26623D1CA763C4C2C06ACB05B9993", + "0x0264B4D47410867482CE8B7428208742FAA0268648534B081AFE57415201E9AA6F", + "0x0264D867B7B8C7B148BB0DF705E6BA1B1A4BD258AA5BE87E6E4FB4A4F61D91DDB5", + "0x02651D5BF0167BD64DB0E74A88FE1FBA863E9F17947A839E5455F48C8A7739C652", + "0x02652486117E65582E070BCB4C387A4B290169EC70B6D67DE8E0FC72306203E7DB", + "0x02668DDE70AE81C16398249BA3E1C09B94534AA027590877EBFF99FE153A15C2CE", + "0x0266A43756FD4A5C1032D210658F5E6A16F00F682164A1AB3EAA6786D6978FD6B4", + "0x0266AF10F44900A4E658ACEF93E5ACBED69A1AB000DD0E0C36BB877C1C219533E6", + "0x0266D7E112763CE656A674CAF592B8BECDDD034BBFB4E6800FF4E653842FF6C5ED", + "0x0266DDB552F5DD3B46755BC8D1DCB6000083F65184553F2FF7E00C819BBE56EC3D", + "0x0266DF17D643B33D9D928E75762D1DC831221598925CEAA6D68217850DF84331B9", + "0x0266FF24950957FD1989E48B19DC1DBB8E05B626AC5F18E85B35A7AC79D48D9DEA", + "0x02671A83E1B0723DE734BFA024A4DD7ED3EBA6102CDAE7005BEE9A73C788A3B720", + "0x026722455B3350C8613121B9931BCF04C5383CB31E2B7D0B0D6F9BEBB15C18B4C9", + "0x0267B965B28ADAE29D88A46E152609DD292A57A93939B7DB89B7D7DEBFC7E7D88D", + "0x0268144B29D522F98890A905816A983977C1DAC57FA26A556615EA62D1FAA532A8", + "0x026819D3B0D8552675AB58E44DD8DE8092F8EDE036A1BFD1CF106C106C391E55DA", + "0x02682FA84DAF9FFFD8F01D9235A5DB70073BCFAAA8BFC4AFB2277A83B19EA1BD57", + "0x026911BE11DA456558DF8CA9F99AE9A47491D706380960BA49471A50098834DFA1", + "0x026964CBF00EE542F5CBE80395FFEA747227BC3EFCC21D04956380180A9BE21546", + "0x026A0D779E58B25405DCCA2870A7A7BC87BAA0671572336C0C61FA182CAFB4EB0D", + "0x026A3B36EA4F4BA43F5B453A81F5A3D9C64053F9937BB1A2EDCBB770361B784038", + "0x026A50311692FB21F821D9B085AC657D5B3931DE134787EE6EB65BBFF0B50767C0", + "0x026AA08C40D121C1A8BC4760C4E92F7D607185CAF5260F8462DD71B1D9B91E6290", + "0x026ADBD0620B62366107EC7FA2D0714C9417D87091B0643DAD80804CFB24F25068", + "0x026B34B4D9B8873EB1348C4264E53C21A19E3BC2ADE52DF11F2659D786A8AD7F44", + "0x026B7DA40EB72ADB8F07BEA185CBE96AEC924F552B74B452EE01207488906DF40B", + "0x026BFB2B7E276AD142403B159FA1DF1576ED5598122FC443EEA682C8E2532E11E4", + "0x026C2AD01AD26B0D3E49005CA47013EC8C485E5D9DA3033B902B19F39F08306BBE", + "0x026CF60766ABF5D01F260B28BA62AA5BCFD842414413C057DF99EB04C5268B49AD", + "0x026D0E61493A6B3CE16F87A5348309414633B386F530DF1B5A8F4F5D56348BDAB6", + "0x026D7B4AF9935BBD5F3ABEB95B95140F7ED05EE9FF24B6E204CC654B5FC4DF994A", + "0x026DB19E7F069FD5227319C69CEB2B221E3EC53530170611A0D3F0C9CC9229D581", + "0x026DB775B3DEFE32A95E5F289AD54EEBB262FC99B77963FDC9A4B009759707C338", + "0x026DF34FEEABA8799C484D190DBC68B1F361C3AC1B48A05000F03A8C2B84B2ED0A", + "0x026F338E4F1477F106CCFAEC812EBCC90A2647B3C4E89291CF4AF5BD4655614BFC", + "0x026F5CA22F25EC7471B7FF2A9105F4D4E841C4AE5E461DFC109A45AE85FD5CC95A", + "0x026FB7BEF2A2023BAF5B3EDE96F902BC9B562C8669D8E93F17A5B36B260652527D", + "0x026FBC2532F00F7A534F2CDAE43C7B8DCB7D8BCC5D6C9E2D8FB1773C4855248384", + "0x026FE4AC7D0C7FE12678CF67FD539CF2D54DC58E8E0A7976C7DC7396DC48689FDA", + "0x027061F160678934BFB91569E9990D7F3FCAF0F2866ADE132E7B1EC7721431AA56", + "0x027078A7FCA7BA223EAA54C32E4F67C20507F838CE7F5CC9E9E2EE24965A8F8619", + "0x0270961855D01D0CEEEFF937661C2B27759A1252EC8AA1C99881F278ECCE3A600D", + "0x027097E0EBD1F500F14DD8B645F07B368BD7EFC7FB335F42548A128A60229B426A", + "0x0270B2DDE3F665BCC6655FEBFEDB5F6214D54343E7C8212A786098356D201C9D2B", + "0x027128BA39A73A0E6D68E9EFA64795E3C9A0C64CCE181465C8DB4AE729933203C1", + "0x0271685ADA238E7037C2C92F33BEDB43680E933EB2B224B419136E68DEA523359F", + "0x0271C9DA2ADA1335474F634628662949ED2D09364E1418CE7BD0348F2658F5B2F6", + "0x0271E16681A5EAC672394808EB92C5CC0BC76F0E61CE50B5DCB1F9D1D087A63F86", + "0x0271FD2F820E6F605F2C4FBDF60A7570AB0CC9265CA48FE8144EAF53609118DD5E", + "0x027246953A42101A4E9E742F37F344045128454A7C46130F61D27407AECA2C75FA", + "0x027379DD7997341D775D330F63AAB2BE02D9F695665126D7313741D6D0937CE910", + "0x0273C4032B2F4880A14A446E7288DD7E4BD7CB937F048BC31C5A036E0F6D69FA48", + "0x02741E6AC672B5EF3F347618D900D4762E3A4CE51B324F5A23C6996F31E67F7DD4", + "0x027454687AF99FF90BD13884FE7B2C126357BEF9502D6625E87EAE4F6147C45B6F", + "0x03A472EC5C4281D11B28C30B8519AF1119E223BBD34F63986680FB8BD493AC12B5", + "0x0390F60BC469E2DAA9B2FD2D2DF315B4F1D3436C96CD580ED1523A79CF12822755", + "0x0344D05BE4852875DD8B767600B1C5C8AD0A74EDA5E99A5EA7A2A199C7F10D19DD", + "0x032ED223FD99431FBA9F2378B3526AB1A858EE97D53E157278BAF7427E8424C141", + "0x031BF2C25DAB4A70A9AE135EF71FD736B12033C03E531A44BD3FDCAFAE4032F8FD", + "0x0304FF7BA4E765918ACA89FFEECC4458CFC7A8395F94EC090C42C19DD7C85D4AAF", + "0x02F94AE5F62754FF23E4608F479FDA62B7FEA0EED9DA4D037DB21A94C5726AFC64", + "0x02CD21DC4C8DB17A377219E2DDC7CFCB3DF21D44A413889D5E4F463D792C6DBE17", + "0x02660D960D145E80EB37534986A6A83A573B0E61080D2FD5496D51EA781F9CC7B6", + "0x025224ADDBA205C828657BFBF715F0273058C9EF4179625435827EBB4B4D71AFCB", + "0x024D7FB3FD2639D70295954CF06382262CB4A23522CD9DA22409C885F241EABE22", + "0x024370E939824B0DE419B722E9C463534B70B667F43B6FBC9F2D14E86A0D8A1B09", + "0x0239EF20C364DFD14BF95DDBB1ED5E88CE651D4C8BA7E074BCD42E562AA9741293", + "0x022619E63A45BB859736645AFEA76E6587B0DB7AD93BED3615490F7FD87AEB5FBA", + "0x03FF1EEEEE7E69CF494E719E9F4909F9AD478F194A176DF7D00BB2057A8C4B2897", + "0x0344A9C8FB3CC716F2E997C2D47F729E1B47E3AC4B1298AA1EDC90605EBC923626", + "0x025C3364210AA1E8811494C6F30C37C8CDC3A7A361E5945CFA8EE6857ADBB6AAEE", + "0x021FFD1E266ED6AD34A74A9FA7EC10C32C199DD4096BCA2B6945521169CEA47B79", + "0x0219A3EFE96E25C0708BEAB6AE0F344536698A5E65330BD06A304494613C4856C6", + "0x03E27DABCD844005D872CB0C8C4F67EEBA6C2CA5E865BF47D3E1AC79A13043A486", + "0x03906D48FB06EFAF97E43EC518DBB28CB33E086771A2287F9BDF34199DA0DE0D6C", + "0x03674F3C5ED0F0C0E34B830CC2D340D6A407C3FA20B220A3624BC9F88E8A7A11ED", + "0x03477A560CEC9A01AD7CDDFE29EAB717B5136BF91CF040EB6FAB500E8AC12B6476", + "0x03058E069ADCC4BCA3235CE2AFFC7A67AFC28C77F480EA82F807DECCE8F1D65265", + "0x02FAD96FFAD213DB8D8D1308781D41964AE416A699D322D40E1D1CBE2C3D712D4E", + "0x02F4B879B4562555DA47427EEC071FE73B4ED3D24D4B0CFADD2BEC04F43D6F0F54", + "0x02BB7E57A162E0684AC1D4F4BAB96A83CD8EE697C096BDBE21EDA16B7EC3403765", + "0x02B9FFF31AE35EE8E3959C69A432FF64A8B8D0DA2DF9FB32575BA0B42F24A86D31", + "0x0293EEE3FF8A9703BEA25D3B7DDD1C6CFE34F2663E3C3D7405518CD017BC080E67", + "0x0289B0089D39A4B49B8A8C21525877831A6111AED5B09A60675BCCA434BE238B59", + "0x02577A35CCFDCF3DF8449BCBD56CAD4519A7152DDCFCBFDE1548490B62316FCC40", + "0x0245ECE5512A7A501B0498F7924345C762C5C51DA9098A8A87446A00464D6AC6EC", + "0x0229AA74868BA000D3EA3F7B975C5DF14D5FF36E2511D2D99F61A92214A9A3E144", + "0x0208DF7B986167063ED3FE94EB662C82BDBC00C4F1FFE19CFA440723251120F5EC", + "0x03036C45CF9855237CD1B3F19B598D34200328B9C19F282A025056D90AF82B3D9F", + "0x02FD117FBEF969DAA86EC4AA03D58866D92F2BAA36199B4449DE28D86FE66DE703", + "0x02FC507BA8625E674B960151A867251AB409D13924EC5C8C957CD63146A45BD984", + "0x02ED3A8D19E0C164ECF312CC00751E0FED1D39AFCF9801C790DF6215FA75CDD61E", + "0x0291FC7DF67C3F05CEC2BE879A9EC010F7739E30BFF65B54F78CE753A69FC67BAC", + "0x024A1B598C654FCBFA577AAA77444D763AC67950DA4D0C142679D2FB479A160818", + "0x03D9B2484725D5FCD8D58EEFBA067D7ED11EEE9F67D0B21822B4F027BCBC52DA3C", + "0x03CAF8D80B93EAB04F5B670DEE2BC4FBB4BADDCEE636BB3B22C1E509E2EB6E09A6", + "0x034F8682C72A2429029A38F1FB42CBB9ADE2F9390ECA8C6AD2FBF846CFA971DD29", + "0x034E251868A15C84C62E2DEF853B5B13729FFE3444D273F6B3E33D369797BEA247", + "0x032611607071BFBB9610C60FAA487D110ED5DAC8351BF6FCC5D5D08888C9F8594A", + "0x02B5C6750548D929D3D1B145852E72F8952AF21C858C4484B5F9C0D794440544EB", + "0x0266C8FDC8602DC88465BE8AE347D125020229E0556FF623B72181EC1EF916E2E1", + "0x03FE181F5505330314B27F0D013A26A558A05B57859E7B84663AF2DB3D2B24DD5B", + "0x030E8E163229C24D5A090CC65102215CCF308D032D7A2A37BE95548F8CAB48868C", + "0x02C4256AB85D7123CFB24B783CF84C687B3CBE8E9B33E92B21CA12129E0E3ADA83", + "0x02B813C32820715BB8F2395952376BCD6A7281F0BE8A9DFE738D0A9EC2DA9FCB82", + "0x029681C64F31DF6C04AE99E207B9DA3AE52B266C5347E4654F48C6542A67BC9035", + "0x0295FA3C370F3398BE12945E4FD33400289A7606FAF7A9D5EA546BDCB24140DD87", + "0x0289540EBEE3170000F89EB5EE714D86B3343166AC80C23F7B13C6B66AAEFA13E1", + "0x024A3517630D481AEFAD2F3A6F47BCFD1BF41F38F96BB9B09BA7650CD3DB68D6D5", + "0x02449A59953D590419BBF6B11898A62D96602B7A44C3AAE84C9ED916B393D180E9", + "0x03F2F3DC5C34EF12164ED3303F20CEB0805E853A5FD23A13AF9B5892CD1AC6B70B", + "0x03F1D4971DC610BEE90539DC7E4D7011E05E3AF4890ECD8B4A946E7F630FB33120", + "0x03EF488CA97DD0B5F997CB63AF898A92DEB3AC34308366103604DBE5593BA10CF2", + "0x03CF94E3A23A8A78CA777BFE4695C960E3699A8D95B8CF130B8F5AFD4737C81045", + "0x03C68BCE487A9605B6510F9FE76C130D7E250990377E2FC06AED9DD2BB790AE7E5", + "0x0394FB22205E1191075B67A5DC00342AD4865BF256E7E7DE26476078CD6B397309", + "0x030B6A6A48B2DEF4F0BFF9235682498FC9D0636A187F66AE6147F6BEA8AF7F65A4", + "0x02F74DE11315EB6A53C8C7F179D2B44A851D64593A99BEE614582942E6F4B8925D", + "0x02E8E82D36070825944E65211260214707E75588026B94CAB96E4C5FC0702C5B81", + "0x02B1C6E5B77E81F3DDE2C891892CD9E1927ADC4794C309BFC059A0459A22DC536C", + "0x02AD1620FDC4DBEAABA2AE3A3F7219E2902B2BC3F6E14A34C89D2CF85B9C07210E", + "0x0268792A50F1C30D5E42072830F046A0D1A89EB70E27E01B72555E1A71BDF8F0CF", + "0x026047C501A725767B3AC0C8ECD74AF10EB423D09E399C2A3DB4F678EBAC782013", + "0x024DC7ABB01895F7AB8FDFB2EABDDEFC8ECE1C959C338079C63411C4722AB38857", + "0x024C10262EC87606034CE2C6E5256710FC7C71FD4C89200137DFBB5D3A4A7A5526", + "0x02229C45C6101BE54C78F20FA5908FE9F4309FE0538331D375189623311C984316", + "0x02198699CEE2A0BFDA62171A4A4E6A5AD897CE3BFD7CD8474E28CCA6F8E251633D", + "0x03D94BF7C34437B2DF2C44E87A0C568BF1331EED9FC1E0779163D75F2B83B20A52", + "0x0383205BDE352B680546AC00EA8B5E9C1759AD495567B18861A617129973CAC930", + "0x028E177BB5946100106EED12A0AF09D089C85791EF38F017F154A0677701928DB4", + "0x02704AEF65CBB77D9E4F83AD828BB61E1C074625CF44C94D8C2BAAE83C84982BBF", + "0x025C2E14D5164614FC3369E832AED8B9802508D6FDEB0EF072D147C8448F2C243A", + "0x0224D53990E35E176BEED6BB7AEBECDD2E5BCF5B6B8292F7FDDDDF8446A67330B3", + "0x02143D156A1FD1D4170681A7DB7BEFFCE1EEA39CC4F991AE86D56036A0C89B658E", + "0x020700AEA7DF2B9C56626717D1957A3325C7E38E7689AC090A2D2C2079F42E303D", + "0x03FE388021E3FE9BE8CC0777E22361EA1B54297D6105E89778E31903A0D8EE1856", + "0x03F3AD7480E35E04A7655BA9AF1C0A6E785894471437667DE934834B8C4B941104", + "0x03A1727EFB99CB7EF84EC6E336AB33EBB32E866D55BA9FB3E9298793439D9825F0", + "0x0385E1191724842AA8959AFA7295F8F46D27D872B882181EC9EDC42F6CC658225B", + "0x0338B76ED250D6D8ED730FE15EB2BDBEAF958AA1DC63025E11B06E0FB8B7DA7AC8", + "0x03257CBF000749D854BC5C92C59FF1888EA0D1374356152087D65C29B2FE0152CF", + "0x0322C63173E117FBD288E8D79C01B479F725A611A627E71D20D48DF831C9A4E73C", + "0x02D7985D19784C7B1462CD51B9F465437AA59B437E75F7092DC67EFC7884077561", + "0x02D3A02AE0B41DA32DDAB48B8F1AF023D0B8BBA0F0F3506926F19C94A79C13ADA0", + "0x02CB1922AC50C6C976CCAFF7E17702CD18BC498EE4572E013DAC3C8D9837743B49", + "0x028A0ED87B73A7216B31512534525DCE8CF1F435C6493651E780493CB6D797C1DA", + "0x025D91AF5B9D041BF686806E1B00F2A88B348F0F3303918B56F8CF602E07A6CB8A", + "0x02442D38DFD763680BF3FFEA38C9AE7440E4B52BE0E40F21B088EFCDD967CA6AB9", + "0x0204BF6C4E3A394FB3F4B8BAC8BC289DFAAE5E578DA939D68D7681F0ACAE745465", + "0x03C551BC0E75F84CCF5DA6FFF9E728B6F5573B1AC1B25CFA1378962B009A30F10E", + "0x03C03036213CB0F856F514E2CCE33A45F6CF9E9E9A5BA0D63CFB66736B0F4FA343", + "0x03278FEDBCB03E6A5723BAB911DBD763CC654309C88F32521F3B94463C5A75F241", + "0x031DA4EE952C5C42E74DDAF4155E422CBE87C20EF84CFA2FD37D77263AB4C991C0", + "0x031B1D2F87BEEA3B0192C4145E5504DA27B62FCCCC0432EC4577C491DF16125F78", + "0x031799644DF0103E810DF91DF4F0DA7B38C5176CF2E6C13980ED901AACD52F9EBB", + "0x02EDC0C44D5106C6D52F11D50802EFCF14F62A2A30B66F5685F8575C9C2480F841", + "0x02E15AC53B62CC12B98F2361C8A2B0B3039DFB182287B745A9562DED3C27294F4A", + "0x02C2FCF6D32D70B0CA2AE9C88A922669CA8982CA2FABD4BA3C987E4B990C6DCE19", + "0x0273834F712CA118A52F7FADE13599039DF726F0C4E7D7D830696ED4ED093CFBA2", + "0x02540E758C3DE8BB24589732644EAE5CED3A512AEA387C32B098C40BB111C0128B", + "0x0241A5AD818E0D8A6BFE2998A986C8D194BDC7631717101B811EF7AFD2824264CC", + "0x0235D112F1BF36C047E757E4D0A16AFF248D1203172A507CA06A2422D736CC7481", + "0x020E5B630D99D1D2FE7597620AF35F10710058B5A6A41BA08A3B2CAACD5AC31D5A", + "0x03F9A4A7FA44F593AFA960A7ED677518C19C7AFAECD223B0DC9B868C22DF1C9DE8", + "0x03E1065A452DF8233050BD25B031D671D74F1C7F7710C837FEA349CF64D77D2331", + "0x03C8762E8C7AEB7CC2138F4EC6F88F26C8E247DEE82E0D429A42257487BFC09662", + "0x0377521AFA2B30149D2D0269EFEB7988C6D94F732636B66686F5E2E1779D4BCE5A", + "0x03492D16D394C4A448E92D304B46376E4B57C9E6AA3A3020E4DC9BC2387527B243", + "0x031D4CB92DA25707A4D00CAC7DCF99C87A0D93154D26FF0165860B36E2CE61200E", + "0x030F5CA8A8AA815AED21B27503F368E46082C5E960F71DE91C11E769514EBBAF11", + "0x02E09A14BBB50BFCE8C123930716A7FE17297944DCABFBB9D0692A157CB468BD2E", + "0x02CD100BE867AD6D1EF3381C23D2A07900058CE156DB69A9863C02D2A036F48A3F", + "0x02A67D4F5703CBCEE2CF3FABAFB12BAE0802BC60466392B45CCF11E23F68E9790C", + "0x03FB2FC203021911C6F1991A06C74DB43AC0E9E94F3F8635AEF0ED95D2383EEEE8", + "0x035B0B1A82CA36841D04AEA05AA56963671A8FEA295EF61EA875B6F75AF34B11DA", + "0x0316378E159E5937850452B9008C9385DE6A5D4C65D4167E47FDB8C351D76184B0", + "0x02F6860CED06E1241263F3C4FA1A27ECDEE4D7E4E6F08CDA9B8507F1EF2F5AD3FE", + "0x02F34C10080DC01A276666BA5852E2A60F2D950D4A415FA25442A0B2A610DF24A2", + "0x02EE268D0D3F11ECA1B89015977B1F90C5CFA9272AFF67F80E20C2830B73C9319D", + "0x027A436E147FA81E0753C99C47E2C0CB52DC607F517DA45A3663E26009C1D405F9", + "0x026685CD55A7409E895B6B21E26CA4B1D8DF904399E03522FA3B2897407AABAA24", + "0x03F447D5360599AABBA05FD81AC32194695072075124F079A6AB304C58A5DC86C4", + "0x03CCB5DDAAC38F74CA08F787197D0682DD7341DAF3EA31D3BF2FA618ED7D029B0F", + "0x03C83FDDC83D7ACB8E87C5F98A5D962389E10C3A3C15C0EFE82471E6F48C04235B", + "0x031E61F3AD7308EA53223CD160606905CC98839098222016D0C69CF8AF147619ED", + "0x02F2D41F4D25BBEC67FFA24800C6FC7F2BDEA02791178D345BEBB9B3E48CA1235D", + "0x02CD61198B816EC3370C2846C3F272177BFC5223BDBA743BBA8CC65C086D2B3244", + "0x028716D2AE4137C44C18451F551F65C438D1B61585AAE18CB6CA2CA890EA288623", + "0x02838ACE2242D795AE5CD6429663365C322A50361D7CD29FEEE14405AE7F62E290", + "0x0243DD133B49D6FEE6418D57F7590F6C9D871EDDB00C26F2531837A83BB14A1959", + "0x0201DCDBBD56EB6E0C3FF415E804AA6FD97EBA5986BE8CDE1F581F03FA63E085FF", + "0x03F1AEAC79E4679933593CB0C824C731B8A22CFB6E9376C8A0271303E530FB5B08", + "0x03EB2C6006DC56410DB3168B038A22CCFBA89DC997ED8C48979957742F632B9CEB", + "0x03BE43C37ECD4328593531FAE5620DC1AA579CB885E9730FE00FDD281B21CF4F9F", + "0x038CA3C21669712BD6A2EBC6BAE5F85132E35E45B44CC41B866AF6C6B3301A7B30", + "0x034D4577232E01F64613D7065EA85526FC1C82188668758EAEE2777AB13FFC4A85", + "0x03346165311FD99E665C5C403A94BE843019B8DF58F2B94EA0EB59BFCC44F29D5C", + "0x0315F383F1716F03CDE811F0B521F247638D48CE7B96ACA6345250C9B7ABD7D74A", + "0x0307FFB1D43ECC7DA67CB9C88BDD8C8C96600FC1D96B20224714297E9F114B7414", + "0x02F4337FFE6591F1610EE4E77A20FD4C2DDB96351CA3D1D29AF18DEB72428B328C", + "0x029D1C25BD8BCA4B19DA191D176BD5B66828349EBA1F759EB4FDCB9EAC312A156E", + "0x026D011A32B4DD6120FA60F4197CB9D73C15C18D4F1EF9DCD67F848947BD9CD4C9", + "0x026AB53271B7C5690C955846419E5F8E981E2FD4581AE1A585B0FCE73C33C34B17", + "0x02440DE92EFA62BAC90023A9B91A773445B65355639A0A0C77DC36BE4F25730565", + "0x02015B544DFA85A34F66BDAF440DBF843D2DF8757430033BBBE13FC8D5B8FD5CD3", + "0x03BC4C5F0DA938C30D2687B85A31930397D00C385F3575E1D3184B3EAEDB19EC0D", + "0x033EC8DB415F58C225892F910FDED0384DD356FE51C7614BD9B73E56759089249D", + "0x02C1A453AC19D4C2678DF70B530D184F207F925FC3B21249CCE95ADF1F12D063BC", + "0x0295E02E34001508FCF38E615AD6C1E5FE6F791E5EB9EA8C3025A0F64CE3157740", + "0x03C32488973AB5B9AE88322B0BF4D43C785B8A7EB4B190D10877D815E2B2CAF8E8", + "0x033C81D524539DFC2B5BA9F340B4487B52B9CE90FDE030F59107E6B77CF38AEAEB", + "0x03039B9EF899339153360A677E56F1489CC660FD440EB30A812CF0BC05A352D245", + "0x02D4100FC99A5B6D4372A9C1A7D352BBDE8055146CB26E0C697CBC46645853235E", + "0x029A6E3EBD77F64B4CF3C3EDBF154A7722D7DB7E673F5208C33564A6491B9E7933", + "0x0268A650713168930D4C8CD807A475EEE8FC8C8E9ED0A4CCE69AB68633F1B22408", + "0x026598F052642F439419597E60B5913DFEF943AD2EA4EE9C926E3DE5B64EEC548E", + "0x0238289484641172D58F029847CA94A5513895C2262512A24079F1E485EE497530", + "0x022C9394AE30594C1A99A45C5B050EE62673FD5367DC9A71052D7306AF49409610", + "0x020FD8E4C71589CF65F0D594C00478BEEEB09806DCC9A146280C1C6049A58751C9", + "0x03F4151171F4984BE22415D05AA2C612CA2B3228E2B00C21519B632195A2F2DA83", + "0x03C48C1C64A583BEF263CD813999508A0984FD0A8F3439F399ED5753A723957BF4", + "0x03C1EF5B58EB2ADC9DD29F7172929EA8CB5DAB8091E2923A4A3FE6F1BA127253BA", + "0x03870CB9C79E37120EE442BAE36B156A18B30627F7B27CBCCFC1F3B2870BB4A721", + "0x036784618DDA168FD9D5A94BFF32DCE2849565DC032B7AF3031400F13B5ABE82F7", + "0x02F3EADB8F5DF480C1B495AB75B1985FA5587A9B5C0817F7A335FC6838C0399489", + "0x02BAE62FB0FDB8A678CC29B9590051545E1AC3481211FFAEA780AF79085E390F27", + "0x028C75DDC80F1D81EA78F2ED8FC21E2CBB19908A4C36C71A590C2631FC6685926B", + "0x02746F3D1D64F6E60BC4E883D9EDDE41BF723949C1F0263DCF4C0B9E8E3C334AD6", + "0x025A80A72494A92B2318C5E8D00780B20D39AEC9247E74EA49F25F537220B72D0C", + "0x024F5796CB7DD848A65FFCE88636E1447C4F2ED9691303B4E9D9A095C8BFEDCE17", + "0x0214E6DA12860E8BB608ABB46D9E6BDD2D32C53E8175063FC0B4F2895A8C27B38F", + "0x03E64697B2E93D2B805050BCE597D1B7081E53E8B2AF3AAB5F60772A550F8650A5", + "0x03CB07D1C3A2D51E0775DA905E43AEC9A5BA5B3EC979A43EF2D534063F8E8BECA5", + "0x03ACA33B508266A7FF17A6F766BAE831DFE5AF21B591897E201C7E99CF92136FF8" + ] + } +} +``` + +### HTTP Request + +| Chain(s) | URL(s) | +| --------------------- | -------------------------------------------------------------------------------------------- | +| **Zilliqa mainnet** | [https://api.zilliqa.com/](https://api.zilliqa.com/) | +| **Developer testnet** | [https://dev-api.zilliqa.com/](https://dev-api.zilliqa.com/) | +| **Local testnet** | [http://localhost:4201/](http://localhost:4201/) | +| **Isolated server** | [https://zilliqa-isolated-server.zilliqa.com/](https://zilliqa-isolated-server.zilliqa.com/) | + +### Arguments + +| Parameter | Type | Required | Description | +| --------- | ------ | -------- | -------------------- | +| `id` | string | Required | `"1"` | +| `jsonrpc` | string | Required | `"2.0"` | +| `method` | string | Required | `"GetCurrentDSComm"` | +| `params` | string | Required | Empty string `""` | diff --git a/docs/api/blockchain-related-methods/api-blockchain-get-ds-block.md b/docs/api/blockchain-related-methods/api-blockchain-get-ds-block.md index ec34374ef..6a73b7efc 100644 --- a/docs/api/blockchain-related-methods/api-blockchain-get-ds-block.md +++ b/docs/api/blockchain-related-methods/api-blockchain-get-ds-block.md @@ -5,9 +5,11 @@ title: GetDsBlock --- -Returns the details of a specified Directory Service block. +There are two variations of the API - `GetDsBlock` and `GetDsBlockVerbose`. -### Example Request +Returns the details of a specified Directory Service block. In verbose mode, additional information will be included in the response. + +### Example Request-1 === "cURL" @@ -70,7 +72,6 @@ Returns the details of a specified Directory Service block. "Difficulty": 95, "DifficultyDS": 156, "GasPrice": "2000000000", - "LeaderPubKey": "0x026100807AA1CD6A09B8EFEC2E9D1469D7CF8A5E66714D6CADE3798585514CBD82", "PoWWinners": [ "0x0207184EB580333132787B360CA6D93290000C9F71E0B6A02C4412E7148FB1AF81", "0x0285B572471A9D3BA729719ED2EEE86395D3B8F243572E9099A5E8B750F46092A7", @@ -90,6 +91,115 @@ Returns the details of a specified Directory Service block. } ``` +### Example Request-2 + +=== "cURL" + + ```shell + curl -d '{ + "id": "1", + "jsonrpc": "2.0", + "method": "GetDsBlockVerbose", + "params": ["9000"] + }' -H "Content-Type: application/json" -X POST "https://api.zilliqa.com/" + ``` + +### Example Response-2 + +```json +{ + "id": "1", + "jsonrpc": "2.0", + "result": { + "B1": [ + false, + false, + false + // Output truncated + ], + "B2": [ + false, + false + // Output truncated + ], + "CS1": "FBA696961142862169D03EED67DD302EAB91333CBC4EEFE7EDB230515DA31DC1B9746EEEE5E7C105685E22C483B1021867B3775D30215CA66D5D81543E9FE8B5", + "PrevDSHash": "585373fb2c607b324afbe8f592e43b40d0091bbcef56c158e0879ced69648c8e", + "header": { + "BlockNum": "9000", + "CommitteeHash": "da38b3b21b26b71835bb1545246a0a248f97003de302ae20d70aeaf854403029", + "Difficulty": 95, + "DifficultyDS": 156, + "EpochNum": "899900", + "GasPrice": "2000000000", + "MembersEjected": [ + "0x02572A2FCD59F8115297B399F76D7ACCFDA7E82AC53702063C3A61FB4D85E0D0C1", + "0x029933F07FF634654C2ECB17A90EAD00CF9EE9F75395E206660CCEFB21874ECEA1", + "0x02AAD92E5A3C9D8ECB364225719478B51026DD5C786BF7312C5C9765353BC4C98B" + ], + "PoWWinners": [ + "0x0207184EB580333132787B360CA6D93290000C9F71E0B6A02C4412E7148FB1AF81", + "0x0285B572471A9D3BA729719ED2EEE86395D3B8F243572E9099A5E8B750F46092A7", + "0x02C1D8C0C7884E65A22FFD76DF9ACC2EA3551133E4ADD59C2DF74F327E09F709FF", + "0x02D728E77C8DA14E900BA8A2014A0D4B5512C6BABCCB77B83F21381437E0038F44", + "0x0321B0E1A20F02C99394DD24B34AB4E79AE6CBF0C689C222F246431A764D6B59DB", + "0x038A724504899CCCA068BD165AE15CE2947667225C72912039CEE4EF3992334843", + "0x03AB477A7A895DD4E84F240A2F1FCF5F86B1A3D59B6AD3065C18CD69729D089959", + "0x03B29C7F3F85329B0621914AB0367BA78135889FB8E4F937DDB7DAA8123AD4DF3C", + "0x03E82B00B53ECC10073404E844841C519152E500A655EEF1D8EAD6612ABDF5B552" + ], + "PoWWinnersIP": [ + { + "IP": "34.212.122.139", + "port": 33133 + }, + { + "IP": "34.214.85.15", + "port": 33133 + }, + { + "IP": "54.148.246.51", + "port": 33133 + }, + { + "IP": "54.218.112.25", + "port": 33133 + }, + { + "IP": "54.184.108.224", + "port": 33133 + }, + { + "IP": "34.211.53.138", + "port": 33133 + }, + { + "IP": "44.234.38.187", + "port": 33133 + }, + { + "IP": "44.234.126.143", + "port": 33133 + }, + { + "IP": "34.223.254.106", + "port": 33133 + } + ], + "PrevHash": "585373fb2c607b324afbe8f592e43b40d0091bbcef56c158e0879ced69648c8e", + "ReservedField": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "SWInfo": { + "Scilla": [0, 0, 0, "0", 0], + "Zilliqa": [0, 0, 0, "0", 0] + }, + "ShardingHash": "3216a33bfd4801e1907e72c7d529cef99c38d57cd281d0e9d726639fd9882d25", + "Timestamp": "1606443830834512", + "Version": 2 + }, + "signature": "7EE023C56602A17F2C8ABA2BEF290386D7C2CE1ABD8E3621573802FA67B243DE60B3EBEE5C4CCFDB697C80127B99CB384DAFEB44F70CD7569F2816DB950877BB" + } +} +``` + ### HTTP Request | Chain(s) | URL(s) | @@ -105,5 +215,5 @@ Returns the details of a specified Directory Service block. | --------- | ------ | -------- | ---------------------------------------------------- | | `id` | string | Required | `"1"` | | `jsonrpc` | string | Required | `"2.0"` | -| `method` | string | Required | `"GetDsBlock"` | +| `method` | string | Required | `"GetDsBlock"` Or `"GetDsBlockVerbose"` | | `params` | string | Required | Specified DS block number to return. Example: `"40"` | diff --git a/docs/api/blockchain-related-methods/api-blockchain-get-node-type.md b/docs/api/blockchain-related-methods/api-blockchain-get-node-type.md new file mode 100644 index 000000000..c0ef22bb7 --- /dev/null +++ b/docs/api/blockchain-related-methods/api-blockchain-get-node-type.md @@ -0,0 +1,49 @@ +--- +id: api-blockchain-get-node-type +title: GetNodeType +--- + +--- + +Returns node type. The possible return values are: + +- `"Not in network, synced till epoch [epoch number]"` if the server has not joined the network and is synced until a specific epoch. +- `"Seed"` if the server is in lookup node mode and is an archival lookup node. +- `"Lookup"` if the server is in lookup node mode + +### Example Request + +=== "cURL" + + ```shell + curl -d '{ + "id": "1", + "jsonrpc": "2.0", + "method": "GetNodeType", + "params": [""] + }' -H "Content-Type: application/json" -X POST "https://api.zilliqa.com/" + ``` + +### Example Response + +```json +{ "id": "1", "jsonrpc": "2.0", "result": "Seed" } +``` + +### HTTP Request + +| Chain(s) | URL(s) | +| --------------------- | -------------------------------------------------------------------------------------------- | +| **Zilliqa mainnet** | [https://api.zilliqa.com/](https://api.zilliqa.com/) | +| **Developer testnet** | [https://dev-api.zilliqa.com/](https://dev-api.zilliqa.com/) | +| **Local testnet** | [http://localhost:4201/](http://localhost:4201/) | +| **Isolated server** | [https://zilliqa-isolated-server.zilliqa.com/](https://zilliqa-isolated-server.zilliqa.com/) | + +### Arguments + +| Parameter | Type | Required | Description | +| --------- | ------ | -------- | ----------------- | +| `id` | string | Required | `"1"` | +| `jsonrpc` | string | Required | `"2.0"` | +| `method` | string | Required | `"GetNodeType"` | +| `params` | string | Required | Empty string `""` | diff --git a/docs/api/blockchain-related-methods/api-blockchain-get-num-peers.md b/docs/api/blockchain-related-methods/api-blockchain-get-num-peers.md new file mode 100644 index 000000000..0e097f41a --- /dev/null +++ b/docs/api/blockchain-related-methods/api-blockchain-get-num-peers.md @@ -0,0 +1,45 @@ +--- +id: api-blockchain-get-num-peers +title: GetNumPeers +--- + +--- + +Returns total number of peers including committee peers. + +### Example Request + +=== "cURL" + + ```shell + curl -d '{ + "id": "1", + "jsonrpc": "2.0", + "method": "GetNumPeers", + "params": [""] + }' -H "Content-Type: application/json" -X POST "https://api.zilliqa.com/" + ``` + +### Example Response + +```json +{ "id": "1", "jsonrpc": "2.0", "result": 600 } +``` + +### HTTP Request + +| Chain(s) | URL(s) | +| --------------------- | -------------------------------------------------------------------------------------------- | +| **Zilliqa mainnet** | [https://api.zilliqa.com/](https://api.zilliqa.com/) | +| **Developer testnet** | [https://dev-api.zilliqa.com/](https://dev-api.zilliqa.com/) | +| **Local testnet** | [http://localhost:4201/](http://localhost:4201/) | +| **Isolated server** | [https://zilliqa-isolated-server.zilliqa.com/](https://zilliqa-isolated-server.zilliqa.com/) | + +### Arguments + +| Parameter | Type | Required | Description | +| --------- | ------ | -------- | ----------------- | +| `id` | string | Required | `"1"` | +| `jsonrpc` | string | Required | `"2.0"` | +| `method` | string | Required | `"GetNumPeers"` | +| `params` | string | Required | Empty string `""` | diff --git a/docs/api/blockchain-related-methods/api-blockchain-get-sharding-structure.md b/docs/api/blockchain-related-methods/api-blockchain-get-sharding-structure.md new file mode 100644 index 000000000..f1867afbf --- /dev/null +++ b/docs/api/blockchain-related-methods/api-blockchain-get-sharding-structure.md @@ -0,0 +1,45 @@ +--- +id: api-blockchain-get-sharding-structure +title: GetShardingStructure +--- + +--- + +Retrieves the sharding structure from the lookup server. + +### Example Request + +=== "cURL" + + ```shell + curl -d '{ + "id": "1", + "jsonrpc": "2.0", + "method": "GetShardingStructure", + "params": [""] + }' -H "Content-Type: application/json" -X POST "https://api.zilliqa.com/" + ``` + +### Example Response + +```json +{ "id": "1", "jsonrpc": "2.0", "result": { "NumPeers": [0] } } +``` + +### HTTP Request + +| Chain(s) | URL(s) | +| --------------------- | -------------------------------------------------------------------------------------------- | +| **Zilliqa mainnet** | [https://api.zilliqa.com/](https://api.zilliqa.com/) | +| **Developer testnet** | [https://dev-api.zilliqa.com/](https://dev-api.zilliqa.com/) | +| **Local testnet** | [http://localhost:4201/](http://localhost:4201/) | +| **Isolated server** | [https://zilliqa-isolated-server.zilliqa.com/](https://zilliqa-isolated-server.zilliqa.com/) | + +### Arguments + +| Parameter | Type | Required | Description | +| --------- | ------ | -------- | ------------------------ | +| `id` | string | Required | `"1"` | +| `jsonrpc` | string | Required | `"2.0"` | +| `method` | string | Required | `"GetShardingStructure"` | +| `params` | string | Required | Empty string `""` | diff --git a/docs/api/blockchain-related-methods/api-blockchain-get-total-coin-supply.md b/docs/api/blockchain-related-methods/api-blockchain-get-total-coin-supply.md index 52cde2d17..fa8ca44f6 100644 --- a/docs/api/blockchain-related-methods/api-blockchain-get-total-coin-supply.md +++ b/docs/api/blockchain-related-methods/api-blockchain-get-total-coin-supply.md @@ -126,5 +126,5 @@ There are two variations of the API - `GetTotalCoinSupply` and `GetTotalCoinSupp | --------- | ------ | -------- | ------------------------------------------------- | | `id` | string | Required | `"1"` | | `jsonrpc` | string | Required | `"2.0"` | -| `method` | string | Required | `"GetTotalCoinSupply or GetTotalCoinSupplyAsint"` | +| `method` | string | Required | `"GetTotalCoinSupply or GetTotalCoinSupplyAsInt"` | | `params` | string | Required | Empty string `""` | diff --git a/docs/api/blockchain-related-methods/api-blockchain-get-tx-block.md b/docs/api/blockchain-related-methods/api-blockchain-get-tx-block.md index 001a78e4b..ea2c9e50e 100644 --- a/docs/api/blockchain-related-methods/api-blockchain-get-tx-block.md +++ b/docs/api/blockchain-related-methods/api-blockchain-get-tx-block.md @@ -5,9 +5,11 @@ title: GetTxBlock --- -Returns the details of a specified Transaction block. +There are two variations of the API - `GetTsBlock` and `GetTsBlockVerbose`. -### Example Request +Returns the details of a specified Transaction block. In verbose mode, additional information will be included in the response. + +### Example Request-1 === "cURL" @@ -58,7 +60,7 @@ Returns the details of a specified Transaction block. } ``` -### Example Response +### Example Response-1 !!! note @@ -104,7 +106,6 @@ Returns the details of a specified Transaction block. "GasLimit": "650000", "GasUsed": "25517", "MbInfoHash": "b2a862649507a9d86b21246b1538aa237c75f65cf7ef9a512e03ba39d0e62933", - "MinerPubKey": "0x02134CC19B594B1571916AABBA4475026D1B2021C19045CB2065E0D3B12706768E", "NumMicroBlocks": 4, "NumPages": 5, "NumTxns": 10022, @@ -120,6 +121,115 @@ Returns the details of a specified Transaction block. } ``` +### Example Request-2 + +=== "cURL" + + ```shell + curl -d '{ + "id": "1", + "jsonrpc": "2.0", + "method": "GetTxBlockVerbose", + "params": ["1002353"] + }' -H "Content-Type: application/json" -X POST "https://api.zilliqa.com/" + ``` + +### Example Response-2 + +```json +{ + "id": "1", + "jsonrpc": "2.0", + "result": { + "B1": [ + false, + false, + false + // Output truncated + ], + "B2": [ + false, + false + // Output truncated + ], + "CS1": "FBA696961142862169D03EED67DD302EAB91333CBC4EEFE7EDB230515DA31DC1B9746EEEE5E7C105685E22C483B1021867B3775D30215CA66D5D81543E9FE8B5", + "PrevDSHash": "585373fb2c607b324afbe8f592e43b40d0091bbcef56c158e0879ced69648c8e", + "header": { + "BlockNum": "9000", + "CommitteeHash": "da38b3b21b26b71835bb1545246a0a248f97003de302ae20d70aeaf854403029", + "Difficulty": 95, + "DifficultyDS": 156, + "EpochNum": "899900", + "GasPrice": "2000000000", + "MembersEjected": [ + "0x02572A2FCD59F8115297B399F76D7ACCFDA7E82AC53702063C3A61FB4D85E0D0C1", + "0x029933F07FF634654C2ECB17A90EAD00CF9EE9F75395E206660CCEFB21874ECEA1", + "0x02AAD92E5A3C9D8ECB364225719478B51026DD5C786BF7312C5C9765353BC4C98B" + ], + "PoWWinners": [ + "0x0207184EB580333132787B360CA6D93290000C9F71E0B6A02C4412E7148FB1AF81", + "0x0285B572471A9D3BA729719ED2EEE86395D3B8F243572E9099A5E8B750F46092A7", + "0x02C1D8C0C7884E65A22FFD76DF9ACC2EA3551133E4ADD59C2DF74F327E09F709FF", + "0x02D728E77C8DA14E900BA8A2014A0D4B5512C6BABCCB77B83F21381437E0038F44", + "0x0321B0E1A20F02C99394DD24B34AB4E79AE6CBF0C689C222F246431A764D6B59DB", + "0x038A724504899CCCA068BD165AE15CE2947667225C72912039CEE4EF3992334843", + "0x03AB477A7A895DD4E84F240A2F1FCF5F86B1A3D59B6AD3065C18CD69729D089959", + "0x03B29C7F3F85329B0621914AB0367BA78135889FB8E4F937DDB7DAA8123AD4DF3C", + "0x03E82B00B53ECC10073404E844841C519152E500A655EEF1D8EAD6612ABDF5B552" + ], + "PoWWinnersIP": [ + { + "IP": "34.212.122.139", + "port": 33133 + }, + { + "IP": "34.214.85.15", + "port": 33133 + }, + { + "IP": "54.148.246.51", + "port": 33133 + }, + { + "IP": "54.218.112.25", + "port": 33133 + }, + { + "IP": "54.184.108.224", + "port": 33133 + }, + { + "IP": "34.211.53.138", + "port": 33133 + }, + { + "IP": "44.234.38.187", + "port": 33133 + }, + { + "IP": "44.234.126.143", + "port": 33133 + }, + { + "IP": "34.223.254.106", + "port": 33133 + } + ], + "PrevHash": "585373fb2c607b324afbe8f592e43b40d0091bbcef56c158e0879ced69648c8e", + "ReservedField": "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "SWInfo": { + "Scilla": [0, 0, 0, "0", 0], + "Zilliqa": [0, 0, 0, "0", 0] + }, + "ShardingHash": "3216a33bfd4801e1907e72c7d529cef99c38d57cd281d0e9d726639fd9882d25", + "Timestamp": "1606443830834512", + "Version": 2 + }, + "signature": "7EE023C56602A17F2C8ABA2BEF290386D7C2CE1ABD8E3621573802FA67B243DE60B3EBEE5C4CCFDB697C80127B99CB384DAFEB44F70CD7569F2816DB950877BB" + } +} +``` + ### HTTP Request | Chain(s) | URL(s) | @@ -131,9 +241,9 @@ Returns the details of a specified Transaction block. ### Arguments -| Parameter | Type | Required | Description | -| --------- | ------ | -------- | -------------------------------------------------------- | -| `id` | string | Required | `"1"` | -| `jsonrpc` | string | Required | `"2.0"` | -| `method` | string | Required | `"GetTxBlock"` | -| `params` | string | Required | Specifed TX block number to return. Example: `"1002353"` | +| Parameter | Type | Required | Description | +| --------- | ------ | -------- | --------------------------------------------------------- | +| `id` | string | Required | `"1"` | +| `jsonrpc` | string | Required | `"2.0"` | +| `method` | string | Required | `"GetTxBlock"` or `"GetTxBlockVerbose"` | +| `params` | string | Required | Specified TX block number to return. Example: `"1002353"` | diff --git a/docs/api/introduction/api-endpoints.md b/docs/api/introduction/api-endpoints.md index 41edfcee8..017a53879 100644 --- a/docs/api/introduction/api-endpoints.md +++ b/docs/api/introduction/api-endpoints.md @@ -13,13 +13,13 @@ description: Zilliqa API Endpoints You can use the following endpoints to interact with the Zilliqa API, either via EVM or the [Zilliqa JSON API](./api-introduction.md). -| Chain(s) | Zilliqa API Chain Id | EVM Chain Id | URL(s) | -| --------------------- | -------------------- | ------------ |-------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **Zilliqa mainnet** | 1 | 32769 | [https://api.zilliqa.com/](https://api.zilliqa.com/) or [http://evm-api-filters.zilliqa.com/](http://evm-api-filters.zilliqa.com/) (if using eth_subscribe) | -| **Developer testnet** | 333 | 33101 | [https://dev-api.zilliqa.com/](https://dev-api.zilliqa.com/) or [http://evm-api-filters-dev.zilliqa.com/](http://evm-api-filters-dev.zilliqa.com/) (if using eth_subscribe) | -| **Developer testnet (new endpoints names)** | 333 | 33101 | [https://api.testnet.zilliqa.com/](https://api.testnet.zilliqa.com/) or [http://evm-api-filters.testnet.zilliqa.com/](http://evm-api-filters.testnet.zilliqa.com/) (if using eth_subscribe) | -| **Developer devnet | 617 | 33385 | [https://api.devnet.zilliqa.com/](https://api.devnet.zilliqa.com/) or [http://evm-api-filters.devnet.zilliqa.com/](http://evm-api-filters.devnet.zilliqa.com/) (if using eth_subscribe) | -| **Isolated server** | 222 | 32990 | [https://zilliqa-isolated-server.zilliqa.com/](https://zilliqa-isolated-server.zilliqa.com/) | +| Chain(s) | Zilliqa API Chain Id | EVM Chain Id | URL(s) | +| ------------------------------------------- | -------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Zilliqa mainnet** | 1 | 32769 | [https://api.zilliqa.com/](https://api.zilliqa.com/) or [http://evm-api-filters.zilliqa.com/](http://evm-api-filters.zilliqa.com/) (if using eth_subscribe) | +| **Developer testnet** | 333 | 33101 | [https://dev-api.zilliqa.com/](https://dev-api.zilliqa.com/) or [http://evm-api-filters-dev.zilliqa.com/](http://evm-api-filters-dev.zilliqa.com/) (if using eth_subscribe) | +| **Developer testnet (new endpoints names)** | 333 | 33101 | [https://api.testnet.zilliqa.com/](https://api.testnet.zilliqa.com/) or [http://evm-api-filters.testnet.zilliqa.com/](http://evm-api-filters.testnet.zilliqa.com/) (if using eth_subscribe) | +| \*\*Developer devnet | 617 | 33385 | [https://api.devnet.zilliqa.com/](https://api.devnet.zilliqa.com/) or [http://evm-api-filters.devnet.zilliqa.com/](http://evm-api-filters.devnet.zilliqa.com/) (if using eth_subscribe) | +| **Isolated server** | 222 | 32990 | [https://zilliqa-isolated-server.zilliqa.com/](https://zilliqa-isolated-server.zilliqa.com/) | You can use the following block explorers for the various networks @@ -31,10 +31,9 @@ You can use the following block explorers for the various networks | **Developer testnet** | [ViewBlock testnet explorer](https://viewblock.io/zilliqa?network=testnet) | | | [DevEx testnet explorer](https://devex.zilliqa.com/?network=https%3A%2F%2Fdev-api.zilliqa.com) | | | [Ethereal EVM explorer](https://evmx-dev.zilliqa.com/overview) | -| | [Otterscan EVM explorer](https://otterscan.testnet.zilliqa.com) | -| **Developer devnet** | [DevEx Devnet explorer](https://devex.zilliqa.com/?network=https%3A%2F%2Fapi.devnet.zilliqa.com) | +| | [Otterscan EVM explorer](https://otterscan.testnet.zilliqa.com) | +| **Developer devnet** | [DevEx Devnet explorer](https://devex.zilliqa.com/?network=https%3A%2F%2Fapi.devnet.zilliqa.com) | | | [Otterscan EVM explorer](https://otterscan.devnet.zilliqa.com) | | **Isolated server** | [Isolated server explorer](https://devex.zilliqa.com/?network=https%3A%2F%2Fzilliqa-isolated-server.zilliqa.com) | -You can use the [faucet services](../../developers/developer-toolings/dev-tools-faucet.md) to add ZIL to your account. - +You can use [Zilliqa Status](https://status.zilliqa.com/) to check the current state of each service and the [faucet services](../../developers/developer-toolings/dev-tools-faucet.md) to add ZIL to your account. diff --git a/docs/api/transaction-related-methods/api-transaction-get-soft-confirmed-tx.md b/docs/api/transaction-related-methods/api-transaction-get-soft-confirmed-tx.md new file mode 100644 index 000000000..b8c2f828f --- /dev/null +++ b/docs/api/transaction-related-methods/api-transaction-get-soft-confirmed-tx.md @@ -0,0 +1,63 @@ +--- +id: api-transaction-get-soft-confirmed-tx +title: GetSoftConfirmedTransaction +--- + +--- + +Returns the details of a specified Transaction. + +### Example Request + +=== "cURL" + + ```shell + curl -d '{ + "id": "1", + "jsonrpc": "2.0", + "method": "GetSoftConfirmedTransaction", + "params": ["cd8727674bc05e0ede405597a218164e1c13c7103b9d0ba43586785f3d8cede5"] + }' -H "Content-Type: application/json" -X POST "https://api.zilliqa.com/" + ``` + +### Example Response + +```json +{ + "id": "1", + "jsonrpc": "2.0", + "result": { + "ID": "cd8727674bc05e0ede405597a218164e1c13c7103b9d0ba43586785f3d8cede5", + "amount": "24999000000000", + "gasLimit": "1", + "gasPrice": "1000000000", + "nonce": "1", + "receipt": { + "cumulative_gas": "1", + "epoch_num": "589763", + "success": true + }, + "signature": "0x593454623A6CE0FEA287E42583445B140F696F79CA508762B8AB44F202686CFA115A2AC36C31E643C9EB0D46A4E6CA8C4EEFD78D7E9A25220DC512C13C9600F0", + "toAddr": "9148616bfdfab321bdd626682a8c446e193eabb2", + "version": "65537" + } +} +``` + +### HTTP Request + +| Chain(s) | URL(s) | +| --------------------- | -------------------------------------------------------------------------------------------- | +| **Zilliqa mainnet** | [https://api.zilliqa.com/](https://api.zilliqa.com/) | +| **Developer testnet** | [https://dev-api.zilliqa.com/](https://dev-api.zilliqa.com/) | +| **Local testnet** | [http://localhost:4201/](http://localhost:4201/) | +| **Isolated server** | [https://zilliqa-isolated-server.zilliqa.com/](https://zilliqa-isolated-server.zilliqa.com/) | + +### Arguments + +| Parameter | Type | Required | Description | +| --------- | ------ | -------- | -------------------------------------------------------- | +| `id` | string | Required | `"1"` | +| `jsonrpc` | string | Required | `"2.0"` | +| `method` | string | Required | `"GetSoftConfirmedTransaction"` | +| `params` | string | Required | Transaction hash of 32 bytes of a specified transaction. | diff --git a/docs/developers/developer-toolings/dev-tools-scillaparser.md b/docs/developers/developer-toolings/dev-tools-scillaparser.md new file mode 100644 index 000000000..31abb8de3 --- /dev/null +++ b/docs/developers/developer-toolings/dev-tools-scillaparser.md @@ -0,0 +1,65 @@ +--- +id: dev-tools-scillaparser +title: Scilla-Parser +keywords: + - rust + - scilla-parser + - scilla +description: Rust parser for scilla +--- + +--- + +## rs-scilla-parser + +[rs-scilla-parser](https://github.com/Zilliqa/rs-scilla-parser) is a Rust-based library to parse scilla contracts. + +The current version of the library parses a given contract and extract: + +- The contract name +- Initial parameters needed to deploy the contract +- The contract's fields +- The contract's transitions + +### Source Code + +The Github repository can be found at +[https://github.com/Zilliqa/rs-scilla-parser](https://github.com/Zilliqa/rs-scilla-parser) + +### Documentation + +The official documentation can be found at [docs.rs](https://docs.rs/scilla-parser/latest/scilla_parser/) + +### Installation + +Run the following command to add rs-scilla-parser to your Rust based project: + +```bash +cargo add rs-scilla-parser +``` + +### Examples + +To parse [HelloWorld.scilla](https://github.com/Zilliqa/rs-scilla-parser/blob/main/tests/contracts/HelloWorld.scilla) contract: + +```rust + use scilla_parser::{Contract, Field, FieldList, Transition, TransitionList, Type}; + + let contract_path = PathBuf::from("tests/contracts/HelloWorld.scilla"); + let contract = Contract::parse(&contract_path).unwrap(); + + assert_eq!( + contract, + Contract { + name: "HelloWorld".to_string(), + init_params: FieldList(vec![Field::new("owner", Type::ByStr(20))]), + fields: FieldList(vec![Field::new("welcome_msg", Type::String)]), + transitions: TransitionList(vec![ + Transition::new("setHello", FieldList(vec![Field::new("msg", Type::String)])), + Transition::new_without_param("getHello") + ]) + } + ); +``` + +For more examples, take a look at the [project's tests](https://github.com/Zilliqa/rs-scilla-parser/blob/main/tests/full_contract_tests.rs). diff --git a/docs/developers/developer-toolings/sdks/dev-tools-gozilliqa.md b/docs/developers/developer-toolings/sdks/dev-tools-gozilliqa.md index 643663e13..ca3ebd51b 100644 --- a/docs/developers/developer-toolings/sdks/dev-tools-gozilliqa.md +++ b/docs/developers/developer-toolings/sdks/dev-tools-gozilliqa.md @@ -38,6 +38,7 @@ Run the following to clone the repository to your local machine git clone[https://github.com/Zilliqa/gozilliqa-sdk.git](https://github.com/Zilliqa/gozilliqa-sdk.git)``` > If you wish to use the release version, please switch your branch to the particular release version. You can find out more information about the releases at [https://github.com/Zilliqa/gozilliqa-sdk/releases](https://github.com/Zilliqa/gozilliqa-sdk/releases) +```` ## Installation @@ -47,7 +48,7 @@ Install the dependent libraries: ```go go get ./... -```` +``` The SDK itself cannot be built into a binary as it does not contains any `main` function, you can directly add it to your own project as a library. Also, we diff --git a/docs/developers/developer-toolings/sdks/dev-tools-pyzil.md b/docs/developers/developer-toolings/sdks/dev-tools-pyzil.md new file mode 100644 index 000000000..67db26496 --- /dev/null +++ b/docs/developers/developer-toolings/sdks/dev-tools-pyzil.md @@ -0,0 +1,364 @@ +--- +id: dev-tools-pyzil +title: pyzil +keywords: + - python + - pyzil + - sdk + - installation + - apis + - examples + - zilliqa +description: pyzil +--- + +--- + +## Introduction + +[pyzil](https://github.com/Zilliqa/pyzil) is a python library for +interacting with the Zilliqa network. It can create wallets, deploy contracts, +and invoke transitions to interact with smart contracts on the Zilliqa network. + +## Source Code + +The github repository can be found at +[https://github.com/Zilliqa/pyzil](https://github.com/Zilliqa/pyzil) + +## Releases + +All releases of gozilliqa can be found at +[https://github.com/Zilliqa/pyzil/releases](https://github.com/Zilliqa/pyzil/releases) + +## Installation + +```bash +pip install pyzil +``` + +or from the source code: + +```bash +git clone https://github.com/Zilliqa/pyzil +cd pyzil +pip install -r requirements.txt +python setup.py install +``` + +## Demo + +### Import pyzil + +```python +from pprint import pprint + +from pyzil.crypto import zilkey +from pyzil.zilliqa import chain +from pyzil.zilliqa.units import Zil, Qa +from pyzil.account import Account, BatchTransfer +``` + +### Set Active Chain, MainNet or TestNet + +```python +chain.set_active_chain(chain.MainNet) +chain.set_active_chain(chain.TestNet) +chain.set_active_chain(chain.IsolatedServer) + +SeedNode = chain.BlockChain( + "https://test-api.zilliqa.com/", + version=65537, network_id=1) +chain.set_active_chain(SeedNode) +``` + +### ZILs Transaction + +```python +# load account from wallet address +account = Account(address="95B27EC211F86748DD985E1424B4058E94AA5814") +balance = account.get_balance() +print("{}: {}".format(account, balance)) + +# load account from private key +# private key is required to send ZILs +account = Account(private_key="...") +balance2 = account.get_balance() +print("Account balance: {}".format(balance2)) + +# to_addr must be bech32 address or 20 bytes checksum address +to_addr = "zil1k5xzgp8xn87eshm3ktplqvs9nufav4pmcm52xx" +# send ZILs +txn_info = account.transfer(to_addr=to_addr, zils=2.718) +pprint(txn_info) +txn_id = txn_info["TranID"] + +# wait chain confirm, may takes 2-3 minutes on MainNet +txn_details = account.wait_txn_confirm(txn_id, timeout=300) +pprint(txn_details) +if txn_details and txn_details["receipt"]["success"]: + print("Txn success: {}".format(txn_id)) +else: + print("Txn failed: {}".format(txn_id)) +``` + +#### Send by Qa + +```python +amount = Qa(1234567890) +txn_info = account.transfer(to_addr=to_addr, zils=amount) +pprint(txn_info) +txn_id = txn_info["TranID"] +``` + +#### Wait for confirm + +```python +amount = Zil(3.14) +txn_details = account.transfer(to_addr, zils=amount, + confirm=True, timeout=300, sleep=20) +print("Transfer Result:") +pprint(txn_details) +pprint(account.last_params) +pprint(account.last_txn_info) +pprint(account.last_txn_details) + +``` + +#### Batch Transfer (Send zils to multi addresses) + +```python +batch = [BatchTransfer(to_addr=to_addr, zils=i) for i in range(10)] +pprint(batch) + +txn_info_list = account.transfer_batch(batch) +pprint(txn_info_list) + +for txn_info in txn_info_list: + if not txn_info: + print("Failed to create txn") + continue + + txn_details = account.wait_txn_confirm(txn_info["TranID"], timeout=300) + pprint(txn_details) + if txn_details and txn_details["receipt"]["success"]: + print("Txn success") + else: + print("Txn failed") + +balance2 = account.get_balance() +print("Account balance: {}".format(balance2)) +``` + +#### Send ZILs from nodes to wallet + +```python +nodes_keys = [ + "private_key1", + "private_key2", + "private_key3", +] + +to_address = "your wallet address" +to_account = Account(address=to_address) +print("Account balance: {}".format(to_account.get_balance())) + +min_gas = Qa(chain.active_chain.api.GetMinimumGasPrice()) + +txn_info_list = [] +for key in nodes_keys: + if not key: + continue + account = Account(private_key=key) + # send all zils + amount = account.get_balance_qa() - min_gas * 2 + if amount <= 0: + continue + + txn_info = account.transfer(to_addr=to_account.bech32_address, zils=amount, gas_price=min_gas) + pprint(txn_info) + + txn_info_list.append(txn_info) + +for txn_info in txn_info_list: + txn_details = chain.active_chain.wait_txn_confirm(txn_info["TranID"], timeout=300) + pprint(txn_details) + if txn_details and txn_details["receipt"]["success"]: + print("Txn success") + else: + print("Txn failed") + +print("Account balance: {}".format(to_account.get_balance())) + +``` + +#### Load account from mykey.txt + +```python +account = Account.from_mykey_txt("mykey.txt") +print(account) +``` + +#### Load account from keystore.json + +```python +account = Account.from_keystore("keystore.json") +print(account) + +``` + +See more examples in [tests/test_account.py](https://github.com/Zilliqa/pyzil/blob/main/pyzil/tests/test_account.py) + +#### bech32 address + +```python +# init from bech32 address +account1 = Account(address="zil1r5verznnwvrzrz6uhveyrlxuhkvccwnju4aehf") +print("address: {}".format(account1.address)) +account2 = Account(address="1d19918a737306218b5cbb3241fcdcbd998c3a72") +print("bech32 address: {}".format(account2.bech32_address)) +assert account1 == account2 + +# tranfer to bech32 address +account = Account.from_mykey_txt("mykey.txt") +txn_info = account.transfer(to_addr="zil1r5verznnwvrzrz6uhveyrlxuhkvccwnju4aehf", zils=0.01) +pprint(txn_info) +txn_id = txn_info["TranID"] + +``` + +### Zilliqa Low-level APIs + +```python +from pyzil.zilliqa.api import ZilliqaAPI, APIError + +api = ZilliqaAPI("https://api.zilliqa.com/") +print(api) + +info = api.GetBlockchainInfo() +pprint(info) + +sharding = api.GetShardingStructure() +pprint(sharding) + +ds_block = api.GetCurrentDSEpoch() +pprint(ds_block) + +tx_block = api.GetCurrentMiniEpoch() +pprint(tx_block) + +``` + +See more examples in [tests/test_lowlevel_api.py](https://github.com/Zilliqa/pyzil/blob/main/pyzil/tests/test_lowlevel_api.py) + +### Zilliqa Currencies Units + +```python +from pyzil.zilliqa.units import Zil, Qa + +zil = Zil(1000.123) +print(repr(zil)) +assert zil == Zil("1000.123") + +qa = Qa(1000123000000000) +print(repr(qa)) +assert qa == zil +assert zil == qa + +print(repr(zil + qa)) +print(repr(zil - 2)) +print(repr(zil * 2)) +print(repr(zil / 2.0)) + +print(repr(qa - 2)) +print(repr(qa * 2)) +print(repr(qa // 2)) +``` + +See more examples in [tests/test_units.py](https://github.com/Zilliqa/pyzil/blob/main/pyzil/tests/test_units.py) + +### Zilliqa Smart Contract + +```python +from pprint import pprint +from pyzil.zilliqa import chain +from pyzil.account import Account +from pyzil.contract import Contract + + +chain.set_active_chain(chain.TestNet) + +account = Account.from_keystore("zxcvbnm,", "zilliqa_keystore.json") +``` + +#### Get contract from address + +```python +address = "45dca9586598c8af78b191eaa28daf2b0a0b4f43" +contract = Contract.load_from_address(address, load_state=True) +print(contract) +print(contract.status) +pprint(contract.state) +contract.get_state(get_code=True, get_init=True) +pprint(contract.code) +pprint(contract.init) +pprint(contract.state) +``` + +#### New contract from code + +```python +code = open("HelloWorld.scilla").read() +contract = Contract.new_from_code(code) +print(contract) + +# set account before deploy +contract.account = account + +init = [ + Contract.value_dict("_scilla_version", "Uint32", "0"), + Contract.value_dict("owner", "ByStr20", account.address0x) +] +contract.deploy(init_params=init, timeout=300, sleep=10) +assert contract.status == Contract.Status.Deployed +``` + +#### Get contracts + +```python +owner_addr = account.address +contracts = Contract.get_contracts(owner_addr) +pprint(contracts) +contracts2 = account.get_contracts() +pprint(contracts2) + +assert contracts == contracts2 +``` + +#### Call contract + +```python +contract_addr = "45dca9586598c8af78b191eaa28daf2b0a0b4f43" +contract = Contract.load_from_address(contract_addr) + +contract.account = account + +resp = contract.call(method="getHello", params=[]) +pprint(resp) +pprint(contract.last_receipt) + +resp = contract.call(method="setHello", params=[Contract.value_dict("msg", "String", "hi contract.")]) +pprint(resp) +pprint(contract.last_receipt) + +resp = contract.call(method="getHello", params=[]) +pprint(resp) +pprint(contract.last_receipt) + +# call contract and deposit Zils to contract (default is 0) +resp = contract.call(method="getHello", params=[], amount=Qa(110)) +pprint(resp) +pprint(contract.last_receipt) + +``` + +See more examples in [test_contract.py](https://github.com/Zilliqa/pyzil/blob/main/pyzil/tests/test_contract.py) diff --git a/docs/developers/developer-toolings/sdks/dev-tools-sdks.md b/docs/developers/developer-toolings/sdks/dev-tools-sdks.md index 69f2814be..4aedeedd2 100644 --- a/docs/developers/developer-toolings/sdks/dev-tools-sdks.md +++ b/docs/developers/developer-toolings/sdks/dev-tools-sdks.md @@ -31,11 +31,15 @@ yours is not listed here, please [create a PR](https://github.com/Zilliqa/dev-portal/pulls) on this repository. [zilliqa-js](https://github.com/Zilliqa/zilliqa-js), +[zilliqa-rs](https://github.com/Zilliqa/zilliqa-rs), +[pyzil](https://github.com/zilliqa/pyzil), [gozilliqa (formerly laksago)](https://github.com/Zilliqa/gozilliqa-sdk) and [laksaj](https://github.com/Zilliqa/zilliqa-developer/tree/main/products/laksaj) are active SDKs maintained by the Zilliqa core team but the zilliqa community members also actively maintain multiple SDKs. +The core team also maintains a fork of [ethers.js](https://github.com/Zilliqa/ethers.js) to keep it working with zilliqa EVM. + ## SDKs Maintained By the Community ### JavaScript/TypeScript diff --git a/docs/developers/developer-toolings/sdks/dev-tools-zilliqars.md b/docs/developers/developer-toolings/sdks/dev-tools-zilliqars.md new file mode 100644 index 000000000..e4d188b97 --- /dev/null +++ b/docs/developers/developer-toolings/sdks/dev-tools-zilliqars.md @@ -0,0 +1,342 @@ +--- +id: dev-tools-zilliqars +title: zilliqa-rs +keywords: + - zilliqars + - zilliqa-rs + - rust + - installation + - apis + - examples + - zrc2 wallet + - hello world + - zilliqa +description: Zilliqa Rust SDK +--- + +--- + +## Introduction + +[zilliqa-rs](https://github.com/Zilliqa/zilliqa-rs) is a Rust library that +allows you to interact with the Zilliqa network nodes - create wallets, deploy +contracts, and invoke transitions to interact with smart contracts. + +## Source Code + +The Github repository can be found at +[https://github.com/Zilliqa/zilliqa-rs](https://github.com/Zilliqa/zilliqa-rs) + +## Releases + +All releases of zilliqa-rs can be found at +[https://crates.io/crates/zilliqa-rs/versions](https://crates.io/crates/zilliqa-rs/versions) + +Release note can be found at +[https://github.com/Zilliqa/zilliqa-rs/releases](https://github.com/Zilliqa/zilliqa-rs/releases) + +## Installation + +```shell +cargo add zilliqa-rs +# you may also need to install the tokio. +cargo add tokio +``` + +## Methods and APIs + +The full documentation can be found in [docs.rs](https://docs.rs/crate/zilliqa-rs/latest) but the following table provides a description of each module of it and what +you may want to use it for. Visit the relevant link of each module to find the +detailed description about the methods and apis supported by that module. + +| Module | Description | +| ---------------------------------------------------------------------------------- | ------------------------------------------------------------- | +| [Core](https://docs.rs/zilliqa-rs/latest/zilliqa_rs/core/index.html) | Shared data types and functionalities. | +| [Providers](https://docs.rs/zilliqa-rs/latest/zilliqa_rs/providers/index.html) | Clients for interacting with zilliqa network. | +| [Signers](https://docs.rs/zilliqa-rs/latest/zilliqa_rs/signers/index.html) | A unified interface for locally signing zilliqa transactions. | +| [Transaction](https://docs.rs/zilliqa-rs/latest/zilliqa_rs/transaction/index.html) | Send transactions to zilliqa network | +| [Contract](https://docs.rs/zilliqa-rs/latest/zilliqa_rs/contract/index.html) | Interact with scilla contracts | + +## Demo + +### Create a new Rust app + +The very first step is to create a binary rust project. + +```bash +cargo new zilliqa-rs-demo +``` + +then we need to add zilliqa-rs and tokio to the project's dependencies: + +```bash +cargo add zilliqa-rs tokio +``` + +### Call a simple JSON-RPC API + +#### Run the isolated-server using docker + +Here we run an isolated server using docker to use it as the target network, but you can use any zilliqa network you want. + +```bash +docker run -d -p 5555:5555 --name iso-server zilliqa-isolated-server:latest +``` + +#### Call GetBalance + +First, we need to create a provider. In the first line of the main, we create an HTTP provider. We use the URL of the isolated server we ran in the previous step. The chain ID of this network is 222. +Then we can call the `get_balance` function of the provider, passing the address of the account we want its balance. + +```rust +use std::error::Error; + +use zilliqa_rs::middlewares::Middleware; +use zilliqa_rs::providers::{Http, Provider}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let provider = Provider::::try_from("http://127.0.0.1:5555")?.with_chain_id(222); + let balance = provider + .get_balance("0x381f4008505e940ad7681ec3468a719060caf796") + .await; + + println!("{balance:?}"); + Ok(()) +} +``` + +### Sending transactions + +#### Provider with a signer + +To start sending transactions, we need to change the provider. The provider we had so far, didn't have a signer. That was because we didn't want to send transactions. But now we want, so we need to provide a signer for it: + +```rust + let wallet = "0xe53d1c3edaffc7a7bab5418eb836cf75819a82872b4a1a0f1c7fcf5c3e020b89" + .parse::()?; + + let provider = Provider::::try_from("http://127.0.0.1:5555")? + .with_chain_id(222) + .with_signer(wallet.clone()); +``` + +Here, we create a new wallet from a private key and a provider with that signer. This provider now can be used to send transactions. + +Let's transfer some ZIL to a random address. First, we create a random wallet: + +```rust + let receiver = LocalWallet::create_random()?; +``` + +Then we need to compose a transaction. `TransactionBuilder` is used to build a transaction: + +```rust + let tx = TransactionBuilder::default() + .to_address(receiver.address.clone()) + .amount(parse_zil("2.0")?) + .gas_price(2000000000u128) + .gas_limit(50u64) + .build(); +``` + +Here we are going to transfer 2.0 ZIL to the receiver. Now we need to send the transaction: + +```rust + provider + .send_transaction_without_confirm::(tx) + .await?; +``` + +Now, let's check the balance: + +```rust + let balance = provider.get_balance(&receiver.address).await; + println!("{balance:?}"); +``` + +```bash +cargo run + +Ok(BalanceResponse { nonce: 138, balance: 899999994124734000000000 }) +Ok(BalanceResponse { nonce: 0, balance: 2000000000000 }) +``` + +#### Using pay function + +TransactionBuilder has an auxiliary function named `pay` to simplify payment transaction creation: + +```rust + let tx = TransactionBuilder::default().pay(amount, receiver.address.clone()).build(); +``` + +### Working with contracts + +#### Technical notes + +One of the coolest features of zilliqa-rs is generating rust code for your scilla contracts during build time. It means if your contract has a transition like `transfer`, you can call it the same as a normal rust function. If it has a parameter of an address, you must pass an address to this function. And this means all of the beauties of type-checking of rust come to working with scilla contracts. + +#### Generating rust code from scilla contracts + +We want to deploy a simple contract named `HelloWorld` and call its `setHello` transition. First, we need to create a folder next to `src`. Let's call it `contracts`. Then we move [HelloWorld.scilla](./tests/contracts/HelloWorld.scilla) to this folder. To let zilliqa-rs scilla-to-rust code generation know about the contracts path, we need to export `CONTRACTS_PATH` environment variable. The simplest way is to create `.cargo/config.toml` file and change it like: + +```toml +[env] +CONTRACTS_PATH = {value = "contracts", relative = true} +``` + +setting `relative` to `true` is crucial. Otherwise, your scilla contracts won't be transpiled to rust. Now, if you build the project using `cargo build`, your HelloWorld.scilla gets converted to rust under the hood. + +The generated code is something like this: + +```rust +impl HelloWorld { + pub async fn deploy(client: Arc , owner: ZilAddress) -> Result { + } + + pub fn address(&self) -> &ZilAddress { + } + + pub fn set_hello(&self , msg: String) -> RefMut<'_, transition_call::TransitionCall> { + } + + pub fn get_hello(&self ) -> RefMut<'_, transition_call::TransitionCall> { + } + + pub async fn welcome_msg(&self) -> Result { + } + + pub async fn owner(&self) -> Result { + } +} +``` + +- The `deploy` deploys the contract to the network. Because HelloWorld.scilla contract accepts an address, `owner`, as a deployment parameter, the `deploy` function needs that too. It means you can't deploy it without providing a valid address. +- The `address` function returns the address of the deployed contract. +- `set_hello` corresponds to `setHello` transition in the contract. Again, because the transition accepts a string parameter, the `set_hello` function does too. +- `get_hello` corresponds to the `getHello` transition. +- The contract has a field named, `welcome_msg`, to get the value of this field, the `welcome_msg` function should be called. +- The contract has an immutable state named, `owner` and we passed the value during deployment. To get the value of the owner, we need to call `owner` + +#### Contract Deployment + +Now it's time to deploy the contract: + +```rust + let contract = HelloWorld::deploy(provider.into(), wallet.address).await?; + println!("Contract address: {:?}", contract.address()); +``` + +The first parameter to `deploy` is the provider. The rest depends on the contract and how many immutable states it has. Here in HelloWorld.scilla we only have `owner`, so we just pass an address. It's type-safe, it means you can't pass an integer or even a raw string to `deploy` function as `owner`. + +Run the code: + +```bash +cargo run + +Ok(BalanceResponse { nonce: 138, balance: 899999994124734000000000 }) +Contract address: ZilAddress("0xC50C93831F6eAB4e4F011076dca6e887288cc872") +``` + +#### Getting contract states + +Our contract has `owner`, an immutable state, and `welcome_msg`, a mutable one. We can get these states by calling the corresponding functions: + +```rust + println!("Contract owner: {:?}", contract.owner().await?); + println!("Welcome msg: {}", contract.welcome_msg().await?); +``` + +#### Calling a transition + +Our contract has a `setHello` transition. Calling this transition is not harder than calling a rust function: + +```rust + contract.set_hello("Salaam".to_string()).call().await?; +``` + +Pay attention, here we need to call `call` too. That's because everything you do before `call` is like configuring the transition call. For example, you can set the amount of ZIL you want to pass to a transition before calling `call` function: + +```rust + contract.transfer(receiver).amount(parse_zil("0.1")).call().await?; +``` + +OK, now if you get and print `welcome_msg` it should have the new value: + +```rust + println!("Welcome msg: {}", contract.welcome_msg().await?); +``` + +The final main: + +```rust +use std::error::Error; + +use zilliqa_rs::{ + contract::HelloWorld, + core::CreateTransactionResponse, + middlewares::Middleware, + providers::{Http, Provider}, + signers::LocalWallet, + transaction::TransactionBuilder, + core::parse_zil, +}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Create the signer. + let wallet = "0xe53d1c3edaffc7a7bab5418eb836cf75819a82872b4a1a0f1c7fcf5c3e020b89" + .parse::()?; + + // Create the provider with a signer. + let provider = Provider::::try_from("http://127.0.0.1:5555")? + .with_chain_id(222) + .with_signer(wallet.clone()); + + // Call a JSON-RPC endpoint. + let balance = provider + .get_balance("0x381f4008505e940ad7681ec3468a719060caf796") + .await; + + println!("{balance:?}"); + + // Send a transaction + let receiver = LocalWallet::create_random()?; + let tx = TransactionBuilder::default() + .to_address(receiver.address.clone()) + .amount(parse_zil("2.0")?) + .gas_price(2000000000u128) + .gas_limit(50u64) + .build(); + + provider + .send_transaction_without_confirm::(tx) + .await?; + + let balance = provider.get_balance(&receiver.address).await; + println!("{balance:?}"); + + // Deploy a contract + let contract = HelloWorld::deploy(provider.into(), wallet.address).await?; + println!("Contract address: {:?}", contract.address()); + + println!("Contract owner: {:?}", contract.owner().await?); + println!("Welcome msg: {}", contract.welcome_msg().await?); + + contract.set_hello("Salaam".to_string()).call().await?; + println!("Welcome msg: {}", contract.welcome_msg().await?); + Ok(()) +} +``` + +Let's run the code: + +```bash +cargo run + +Ok(BalanceResponse { nonce: 138, balance: 899999994124734000000000 }) +Contract address: ZilAddress("0xB84De4A67E1640D9259c502AAb6751678B593185") +Contract owner: ZilAddress("0xd90f2e538CE0Df89c8273CAd3b63ec44a3c4ed82") +Welcome msg: Hello world! +Welcome msg: Salaam +``` diff --git a/docs/developers/getting-started/dev-started-env.md b/docs/developers/getting-started/dev-started-env.md index a4327b4dd..8a5c8d15c 100644 --- a/docs/developers/getting-started/dev-started-env.md +++ b/docs/developers/getting-started/dev-started-env.md @@ -17,38 +17,36 @@ description: Zilliqa Development Environments - Testnet, Mainnet & Isolated Serv ## Zilliqa Mainnet -| | URL(s) | -| :------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **API URL** | [https://api.zilliqa.com/](https://api.zilliqa.com/) | -| **EVM API** | [https://api.zilliqa.com/](https://api.zilliqa.com/) or [http://evm-api-filters.zilliqa.com/](http://evm-api-filters.zilliqa.com/) (if using eth_subscribe) | -| **Block Explorer** | [**Link**](https://viewblock.io/zilliqa) | -| **Devex explorer** | [**Link**](https://devex.zilliqa.com/) | -| **EVM Block Explorer** | [Ethereal EVM explorer](https://evmx.zilliqa.com/overview) | -| **WebSocket endpoint** | `wss://api-ws.zilliqa.com` | -| **Chain ID** | 1 | -| **EVM Chain ID** | 32769 | -| **VERSION** | v9.3.0 | -| **REWARD CONTROL CONTRACT ADDRESS** | 0xbce4ee32539760622a2fe2b7cc67b089aa11b63a | -| **PERSISTENCE BUCKET (S3 compatible)** | `s3://zq1-mainnet-persistence` (use: `AWS_ENDPOINT_URL=https://storage.googleapis.com`) | -| **PERSISTENCE FOLDER NAME** | mainnet-v930 | +| | URL(s) | +| :---------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **API URL** | [https://api.zilliqa.com/](https://api.zilliqa.com/) | +| **EVM API** | [https://api.zilliqa.com/](https://api.zilliqa.com/) or [http://evm-api-filters.zilliqa.com/](http://evm-api-filters.zilliqa.com/) (if using eth_subscribe) | +| **Block Explorer** | [**Link**](https://viewblock.io/zilliqa) | +| **Devex explorer** | [**Link**](https://devex.zilliqa.com/) | +| **EVM Block Explorer** | [Ethereal EVM explorer](https://evmx.zilliqa.com/overview) | +| **WebSocket endpoint** | `wss://api-ws.zilliqa.com` | +| **Chain ID** | 1 | +| **EVM Chain ID** | 32769 | +| **VERSION** | v9.3.0 | +| **REWARD CONTROL CONTRACT ADDRESS** | 0xbce4ee32539760622a2fe2b7cc67b089aa11b63a | +| **PERSISTENCE BUCKET** | [**Link**](https://console.cloud.google.com/storage/browser/zq1-mainnet-persistence) | ## Developer Testnet -| | URL(s) | -| :------------------------------------- | :-------------------------------------------------------------------------------------- | -| **API URL** | [https://dev-api.zilliqa.com/](https://dev-api.zilliqa.com/) | -| **EVM URL** | [https://evm-api-dev.zilliqa.com/](https://evm-api-dev.zilliqa.com/) | -| **Faucet** | [**Link**](https://dev-wallet.zilliqa.com/home?network=testnet) | -| **Block Explorer** | [**Link**](https://viewblock.io/zilliqa?network=testnet) | -| **EVM Block Explorer** | [**Link**](https://otterscan.testnet.zilliqa.com) | -| **WebSocket endpoint** | `wss://dev-ws.zilliqa.com` | -| **Chain ID** | 333 | -| **EVM Chain ID** | 33101 | -| **VERSION** | v9.3.0rc19 | -| **REWARD CONTROL CONTRACT ADDRESS** | 0x489F0Ec426DF9343A5F6D7B170B0Bca08e6a81CE | -| **PERSISTENCE BUCKET (S3 compatible)** | `s3://zq1-testnet-persistence` (use: `AWS_ENDPOINT_URL=https://storage.googleapis.com`) | -| **PERSISTENCE HTTPS ENDPOINT** | `https://persistence.testnet.zq1.dev` | -| **PERSISTENCE FOLDER NAME** | testnet-v930rc19 | +| | URL(s) | +| :---------------------------------- | :----------------------------------------------------------------------------------- | +| **API URL** | [https://dev-api.zilliqa.com/](https://dev-api.zilliqa.com/) | +| **EVM URL** | [https://evm-api-dev.zilliqa.com/](https://evm-api-dev.zilliqa.com/) | +| **Faucet** | [**Link**](https://dev-wallet.zilliqa.com/home?network=testnet) | +| **Block Explorer** | [**Link**](https://viewblock.io/zilliqa?network=testnet) | +| **EVM Block Explorer** | [**Link**](https://otterscan.testnet.zilliqa.com) | +| **WebSocket endpoint** | `wss://dev-ws.zilliqa.com` | +| **Chain ID** | 333 | +| **EVM Chain ID** | 33101 | +| **VERSION** | v9.3.0rc19 | +| **REWARD CONTROL CONTRACT ADDRESS** | 0x489F0Ec426DF9343A5F6D7B170B0Bca08e6a81CE | +| **PERSISTENCE BUCKET** | [**Link**](https://console.cloud.google.com/storage/browser/zq1-testnet-persistence) | +| **PERSISTENCE HTTPS ENDPOINT** | `https://persistence.testnet.zq1.dev` | ## Developer Devnet diff --git a/docs/developers/upgrade-notices/dev-upgrade-v8.md b/docs/developers/upgrade-notices/dev-upgrade-v8.md deleted file mode 100644 index 08724b268..000000000 --- a/docs/developers/upgrade-notices/dev-upgrade-v8.md +++ /dev/null @@ -1,186 +0,0 @@ ---- -id: dev-upgrade-v8 -title: v8.0.0 Upgrade Notice -keywords: - - upgrade - - v8.0.0 - - zilliqa -description: Zilliqa v8.0.0 upgrade notice ---- - ---- - -Zilliqa version `8.0.0` consists of numerous significant changes. This page -summarizes some of the major changes that developers and exchanges will need to -take note of. The full release note of `v8.0.0` is available -[here](https://github.com/Zilliqa/Zilliqa/releases/tag/v8.0.0). - -## Upgrade Duration - -| | Date/Time | -| ------------- | ------------------------------- | -| Upgrade start | Tuesday 11th May 2021 05:00 UTC | -| Upgrade end | Tuesday 11th May 2021 11:00 UTC | - -## Core Protocol Updates - -### 1) Faster block production rate - -We have made some changes to our pBFT (Practical Byzantine Fault Tolerance) -consensus and transaction dispatching and processing implementation. This allows -for faster block production rate. - -| | Before `v8.0.0` | `v8.0.0` | -| ------------------------------------ | --------------- | --------------- | -| Peak final block production time | 40 seconds | 29 seconds | -| Expected Tx block count per 24 hours | ~1600 Tx blocks | ~2200 Tx blocks | - -References: - -- [`ZIP-14 - Revised pBFT Consensus`](https://github.com/Zilliqa/ZIP/blob/master/zips/zip-14.md) -- [`Revised pBFT consensus with txn processing implementation`](https://github.com/Zilliqa/Zilliqa/pull/2216) - -### 2) Block reward adjustment - -Faster block production rate will result in an increase in inflation rate. -Zilliqa `v8.0.0` will not include any adjustment to the current inflation rate. -Instead, in order to preserve the current inflation rate, the reward allocated -per DS epoch will be decreased from 275,000 $ZIL per DS block to 176,000 $ZIL -per DS block. We will update the `COINBASE_REWARD_PER_DS`as follows: - -| | Before `v8.0.0` | `v8.0.0` | -| ------------------------ | ------------------ | ------------------ | -| `COINBASE_REWARD_PER_DS` | 275000000000000000 | 176000000000000000 | - -Please note that this change is considered an interim change. If the block -production rate deviates from the expected value significantly, a new governance -proposal can be introduced to adjust the value in subsequent Mainnet upgrades. - -### 3) Payment transaction gas unit increase from 1 to 50 - -As per [ZIP-18](https://github.com/Zilliqa/ZIP/blob/master/zips/zip-18.md), -which passed Zilliqa governance vote, the gas unit of payment transaction will -be adjusted from 1 to 50 gas unit. We will update `NORMAL_TRAN_GAS` as follows: - -| | Before `v8.0.0` | `v8.0.0` | -| ----------------- | --------------- | -------- | -| `NORMAL_TRAN_GAS` | 1 | 50 | - -When handling payment transactions, developers and exchanges will need to call -`CreateTransaction` with `gasLimit` set to at least `50` instead of `1` from -`v8.0.0` onwards. As a result of this change, the minimal cost of a payment -transaction fee will increase from 0.002 $ZIL to 0.1 $ZIL assuming the lowest -gas price. - -!!! important - - 1. Smart contract transaction gas unit remains unchanged. - 2. Developers and exchanges may proceed to make the `gasLimit` change above even before `v8.0.0` is deployed. Until the deployment, the payment transaction fee will continue to be 0.002 $ZIL, with or without the `gasLimit` change. - -### 4) Deprecation and removal of `GetPendingTxn` and `GetPendingTxns` API - -Since `v7.0.0`, we have released a new API -[`GetTransactionStatus`](https://dev.zilliqa.com/api/transaction-related-methods/api-transaction-get-transaction-status) -which tracks transaction status during the transactional lifetime. -`GetPendingTxn` and `GetPendingTxns` will be removed with effect from `v8.0.0`. - -### 5) Non-interactive mode support for seed nodes - -Seed node operators will now have the option of invoking `launch.sh` in -non-interactive mode. Operators will need to configure the following environment -variables when using non-interactive mode. - -```sh -NONINTERACTIVE="true" -IP_ADDRESS="x.y.z.a" -IP_WHITELISTING="N" #optional -``` - -!!! note - - If `IP_WHITELISTING` is set to `N`, the script assumes the existence of the whitelisted keypair file called "whitelistkey.txt", and further assumes "mykey.txt" as the whitelisted key if "whitelistkey.txt" does not exist. - -### 6) Bug fixes around mining node joining - -We have fixed a few mining node joining issues. Special thanks to -[K1-pool](https://k1pool.com/pool/zil) for reporting a few issues to us. - -## Scilla Updates - -### 1) Scilla disambiguation fix - -!!! warning - - To support Scilla features such as remote state read and external library, user-defined ADTs will need to be non-ambiguous starting from `v8.0.0`. This means - that when calling a contract transition that contains a user-defined ADT, the user-defined ADT will need to be prefixed with the contract address that defines - the type. - -For instance, let's assume a user-defined ADT named `SSNCycleInfo` is defined in -a contract deployed at address `0xb55cc7894536ac015350790550b0c03f49eb8ebd`. -When using the user-defined ADT, it will need to be prefixed with the contract -address (i.e., `0xb55cc7894536ac015350790550b0c03f49eb8ebd.SSNCycleInfo`). If -your contract transition has user-defined ADTs, you will need to modify the way -you call the transition by appending the contract address prefix. - -### 2) Introduction of new Scilla feature - remote state read - -With effect from `v8.0.0`, a Scilla contract will be able to read the state of -another contract by using the remote state read feature. - -### 3) Smart contract parameters change - -To support larger dApps and the need for more contract calls, we will adjust the -following constant values - -| | Before `v8.0.0` | `v8.0.0` | -| ------------------------ | --------------- | -------- | -| `MAX_CONTRACT_EDGES` | 10 | 20 | -| `MAX_CODE_SIZE_IN_BYTES` | 51200 | 76800 | - -## Staking Updates - -As part of the `v8.0.0` rollout, the current Staking Phase 1.0 feature will be -updated to the new Staking Phase 1.1. - -### 1) Staking contract migration - -Due to the Scilla disambiguation fix, we will be freezing the existing staking -contract shortly before the `v8.0.0` network upgrade commences. The contract -will be frozen permanently, and the contract states and funds will be migrated -to a new contract. - -!!! important - - 1. Migration to the new contract is expected to take up to 7 days - 2. During the migration, the existing contract will be paused and no staking activities such as stake withdrawal can be conducted - 3. Rewards for staking will be retroactively distributed after the staking contract migration - 4. For wallets, explorers and exchanges, please note that the contract address will be changed and you will need to update it on your end. We will provide the address once we have deployed the Mainnet contract - 5. We will make Staking Phase 1.1 available on the public testnet shortly to help you prepare for the staking contract migration - 6. For community members, please kindly wait for your wallet provider to update to the new staking contract if you encounter any staking issue - -### 2) Switching of staking wallet - -The new staking contract will also have a new `swap delegate` feature which -allows a delegator to swap his wallet address with another address without -incurring any unbonding period or rewards penalty. - -### 3) Staking parameter adjustments - -Due to faster block production rate after `v8.0.0`, we will be adjusting the -following parameters to bring rewarding and unbonding timing back to parity. - -| Parameters | New value | -| ----------------- | ------------------------------ | -| Rewards per cycle | 1,548,800 $ZIL | -| Reward cycle | 2,200 final blocks (~1 day) | -| Unbonding period | 30,800 Final blocks (~2 weeks) | - -Please note that this change is considered an interim change. If the block -production rate deviates from the expected value significantly, a new governance -proposal can be introduced to adjust the staking parameter accordingly. - -### 4) $gZIL ending period - -`$gZIL` minting period has been set to end on block `1483713`. This value cannot -be changed. With the changes to block time in `v8.0.0`, the ending wall clock -may vary as a result. diff --git a/docs/news/index.md b/docs/news/index.md new file mode 100644 index 000000000..af835e24e --- /dev/null +++ b/docs/news/index.md @@ -0,0 +1,13 @@ +--- +id: news +title: News +keywords: ["news"] +--- + +## Zilliqa-rs 0.2.0 + +Version 0.2.0 of the zilliqa-rs SDK is officially live, offering several features that make it easy for Rust developers to build and interact with Scilla contracts using the native Zilliqa API. Read more about it on [Zilliqa blog](https://blog.zilliqa.com/zilliqa-launches-rust-sdk/). The full release notes can be read [here](https://github.com/Zilliqa/zilliqa-rs/releases) + +## Scilla Parser 1.0.0 + +The newest version of scilla-parser, a Rust library to parse scilla contract, is now available to download and use. The full release note can be found [here](https://github.com/Zilliqa/rs-scilla-parser/releases/tag/v1.0.0). diff --git a/docs/staking/staking-phase-1.1/staking-phase11-notice.md b/docs/staking/staking-phase-1.1/staking-phase11-notice.md index e0dff4b9e..8951d90a3 100644 --- a/docs/staking/staking-phase-1.1/staking-phase11-notice.md +++ b/docs/staking/staking-phase-1.1/staking-phase11-notice.md @@ -107,4 +107,3 @@ For more information, please refer to - [Phase 1.1 staking contracts](https://github.com/Zilliqa/staking-contract) - [ZIP-19 - Seed Node Staking Mechanism: Phase 1.1](https://github.com/Zilliqa/ZIP/blob/master/zips/zip-19.md) -- [Zilliqa Mainnet V8 Upgrade Notice](../../developers/upgrade-notices/dev-upgrade-v8.md) diff --git a/docs/zilevm/developer-onboarding/hardhat.md b/docs/zilevm/developer-onboarding/hardhat.md index 900a4ec9a..2504d11b0 100644 --- a/docs/zilevm/developer-onboarding/hardhat.md +++ b/docs/zilevm/developer-onboarding/hardhat.md @@ -10,7 +10,7 @@ description: Hardhat allows developers to easily compile, test, and deploy their ## Hardhat -[Hardhat](https://hardhat.org/) is a development environment for the Solidity programming language. One of the primary use cases for Hardhat is to make it easier for developers to compile and deploy their Solidity smart contracts. Another common use case for Hardhat is to make it easier to write and run automated tests for Solidity smart contracts. This can help to ensure that the contracts are working as intended and can help to catch any bugs or issues before they are deployed to the main network. Check the [documentation](https://hardhat.org/hardhat-runner/docs/getting-started#quick-start) for more information. +[Hardhat](https://hardhat.org/) is a development environment for the Solidity programming language. One of the primary use cases for Hardhat is to make it easier for developers to compile and deploy their Solidity smart contracts. Another common use case for Hardhat is to make it easier to write and run automated tests for Solidity smart contracts. This can help to ensure that the contracts are working as intended and can help to catch any bugs or issues before they are deployed to the main network. Check the [documentation](https://hardhat.org/hardhat-runner/docs/getting-started#quick-start) for more information. If you plan to use ethers.js with Zilliqa, consider using [our fork](https://github.com/Zilliqa/ethers.js) to avoid errors - the only change is that our fork tolerates the non-canonical signatures that are generated by the Zilliqa native API. ### Hardhat with Truffle diff --git a/docs/zilevm/getting-started/zilevm-introduction.md b/docs/zilevm/getting-started/zilevm-introduction.md index f7586ffc4..ef45baa65 100644 --- a/docs/zilevm/getting-started/zilevm-introduction.md +++ b/docs/zilevm/getting-started/zilevm-introduction.md @@ -42,3 +42,14 @@ You can use the [testnet faucet](../../developers/developer-toolings/dev-tools-faucet.md) to add ZIL to your EVM account; just paste your ethereum address (given by your wallet) into the faucet destination address. + +#### EVM Explorer + +You can use otterscan to explore testnet and devnet. + +| Network | URL | +| :------ | :--------------------------------------------- | +| testnet | [Link](https://otterscan.testnet.zilliqa.com/) | +| devnet | [Link](https://otterscan.devnet.zilliqa.com/) | + +Zilliqa has its own fork of [otterscan](https://github.com/Zilliqa/otterscan) for more customizations and features. diff --git a/docs/zilevm/protocol/developer-rpc.md b/docs/zilevm/protocol/developer-rpc.md index 011ee1f8d..86e2dcbb4 100644 --- a/docs/zilevm/protocol/developer-rpc.md +++ b/docs/zilevm/protocol/developer-rpc.md @@ -43,6 +43,13 @@ description: Specification of ZILEVM RPC Endpoint - `eth_getLogs` - `eth_subscribe` - `eth_unsubscribe` +- `eth_gasPrice` +- `eth_getBlockByNumber` +- `eth_getBlockByHash` +- `eth_estimateGas` +- `eth_getTransactionReceipt` +- `eth_recoverTransaction` +- `eth_getBlockReceipts` ### Partially supported APIs @@ -57,6 +64,9 @@ necessarily meaningful ones. - `eth_getWork` - `eth_submitWork` - `eth_submitHashrate` +- `eth_coinbase` +- `eth_getUncleByBlockHashAndIndex` +- `eth_getUncleByBlockNumberAndIndex` - `db_putString (deprecated)` - `db_getString (deprecated)` - `db_putHex (deprecated)` diff --git a/needing-organisation/newdocs/developer-portal/docs/dev/dev-tools-zilliqars.md b/needing-organisation/newdocs/developer-portal/docs/dev/dev-tools-zilliqars.md new file mode 100644 index 000000000..166236612 --- /dev/null +++ b/needing-organisation/newdocs/developer-portal/docs/dev/dev-tools-zilliqars.md @@ -0,0 +1,307 @@ +--- +id: dev-tools-zilliqars +title: zilliqa-rs +keywords: + - zilliqars + - zilliqa-rs + - rust + - installation + - apis + - examples + - zrc2 wallet + - hello world + - zilliqa +description: Zilliqa Rust SDK +--- + +--- + +## Introduction + +[zilliqa-rs](https://github.com/Zilliqa/zilliqa-rs) is a Rust library that +allows you to interact with the Zilliqa network nodes - create wallets, deploy +contracts, and invoke transitions to interact with smart contracts. + +## Source Code + +The Github repository can be found at +[https://github.com/Zilliqa/zilliqa-rs](https://github.com/Zilliqa/zilliqa-rs) + +## Releases + +All releases of zilliqa-rs can be found at +[https://crates.io/crates/zilliqa-rs/versions](https://crates.io/crates/zilliqa-rs/versions) + +Release note can be found at +[https://github.com/Zilliqa/zilliqa-rs/releases](https://github.com/Zilliqa/zilliqa-rs/releases) + +## Installation + +```shell +cargo add zilliqa-rs +# you may also need to install the tokio. +cargo add tokio +``` + +## Methods and APIs + +The full documentation can be found in [docs.rs](https://docs.rs/crate/zilliqa-rs/latest) but the following table provides a description of each module of it and what +you may want to use it for. Visit the relevant link of each module to find the +detailed description about the methods and apis supported by that module. + +| Module | Description | +| ---------------------------------------------------------------------------------- | ------------------------------------------------------------- | +| [Core](https://docs.rs/zilliqa-rs/latest/zilliqa_rs/core/index.html) | Shared data types and functionalities. | +| [Providers](https://docs.rs/zilliqa-rs/latest/zilliqa_rs/providers/index.html) | Clients for interacting with zilliqa network. | +| [Signers](https://docs.rs/zilliqa-rs/latest/zilliqa_rs/signers/index.html) | A unified interface for locally signing zilliqa transactions. | +| [Transaction](https://docs.rs/zilliqa-rs/latest/zilliqa_rs/transaction/index.html) | Send transactions to zilliqa network | +| [Contract](https://docs.rs/zilliqa-rs/latest/zilliqa_rs/contract/index.html) | Interact with scilla contracts | + + +## Demo +### Create a new Rust app +The very first step is to create a binary rust project. + +```bash +cargo new zilliqa-rs-demo +``` + +then we need to add zilliqa-rs and tokio to the project's dependencies: + +```bash +cargo add zilliqa-rs tokio +``` + +### Call a simple JSON-RPC API +#### Run the isolated-server using docker +Here we run an isolated server using docker to use it as the target network, but you can use any zilliqa network you want. +```bash +docker run -d -p 5555:5555 --name iso-server zilliqa-isolated-server:latest +``` + +#### Call GetBalance +First, we need to create a provider. In the first line of the main, we create an HTTP provider. We use the URL of the isolated server we ran in the previous step. The chain ID of this network is 222. +Then we can call the `get_balance` function of the provider, passing the address of the account we want its balance. + +```rust +use std::error::Error; + +use zilliqa_rs::middlewares::Middleware; +use zilliqa_rs::providers::{Http, Provider}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let provider = Provider::::try_from("http://127.0.0.1:5555")?.with_chain_id(222); + let balance = provider + .get_balance("0x381f4008505e940ad7681ec3468a719060caf796") + .await; + + println!("{balance:?}"); + Ok(()) +} +``` + +### Sending transactions +#### Provider with a signer +To start sending transactions, we need to change the provider. The provider we had so far, didn't have a signer. That was because we didn't want to send transactions. But now we want, so we need to provide a signer for it: + +```rust,ignore + let wallet = "0xe53d1c3edaffc7a7bab5418eb836cf75819a82872b4a1a0f1c7fcf5c3e020b89" + .parse::()?; + + let provider = Provider::::try_from("http://127.0.0.1:5555")? + .with_chain_id(222) + .with_signer(wallet.clone()); +``` +Here, we create a new wallet from a private key and a provider with that signer. This provider now can be used to send transactions. + +Let's transfer some ZIL to a random address. First, we create a random wallet: +```rust,ignore + let receiver = LocalWallet::create_random()?; +``` +Then we need to compose a transaction. `TransactionBuilder` is used to build a transaction: +```rust,ignore + let tx = TransactionBuilder::default() + .to_address(receiver.address.clone()) + .amount(parse_zil("2.0")?) + .gas_price(2000000000u128) + .gas_limit(50u64) + .build(); +``` +Here we are going to transfer 2.0 ZIL to the receiver. Now we need to send the transaction: +```rust,ignore + provider + .send_transaction_without_confirm::(tx) + .await?; +``` +Now, let's check the balance: +```rust,ignore + let balance = provider.get_balance(&receiver.address).await; + println!("{balance:?}"); +``` +```bash +cargo run + +Ok(BalanceResponse { nonce: 138, balance: 899999994124734000000000 }) +Ok(BalanceResponse { nonce: 0, balance: 2000000000000 }) +``` +#### Using pay function +TransactionBuilder has an auxiliary function named `pay` to simplify payment transaction creation: +```rust,ignore + let tx = TransactionBuilder::default().pay(amount, receiver.address.clone()).build(); +``` + +### Working with contracts +#### Technical notes +One of the coolest features of zilliqa-rs is generating rust code for your scilla contracts during build time. It means if your contract has a transition like `transfer`, you can call it the same as a normal rust function. If it has a parameter of an address, you must pass an address to this function. And this means all of the beauties of type-checking of rust come to working with scilla contracts. + +#### Generating rust code from scilla contracts +We want to deploy a simple contract named `HelloWorld` and call its `setHello` transition. First, we need to create a folder next to `src`. Let's call it `contracts`. Then we move [HelloWorld.scilla](./tests/contracts/HelloWorld.scilla) to this folder. To let zilliqa-rs scilla-to-rust code generation know about the contracts path, we need to export `CONTRACTS_PATH` environment variable. The simplest way is to create `.cargo/config.toml` file and change it like: + +```toml +[env] +CONTRACTS_PATH = {value = "contracts", relative = true} +``` +setting `relative` to `true` is crucial. Otherwise, your scilla contracts won't be transpiled to rust. Now, if you build the project using `cargo build`, your HelloWorld.scilla gets converted to rust under the hood. + +The generated code is something like this: + +```rust,ignore +impl HelloWorld { + pub async fn deploy(client: Arc , owner: ZilAddress) -> Result { + } + + pub fn address(&self) -> &ZilAddress { + } + + pub fn set_hello(&self , msg: String) -> RefMut<'_, transition_call::TransitionCall> { + } + + pub fn get_hello(&self ) -> RefMut<'_, transition_call::TransitionCall> { + } + + pub async fn welcome_msg(&self) -> Result { + } + + pub async fn owner(&self) -> Result { + } +} +``` +* The `deploy` deploys the contract to the network. Because HelloWorld.scilla contract accepts an address, `owner`, as a deployment parameter, the `deploy` function needs that too. It means you can't deploy it without providing a valid address. +* The `address` function returns the address of the deployed contract. +* `set_hello` corresponds to `setHello` transition in the contract. Again, because the transition accepts a string parameter, the `set_hello` function does too. +* `get_hello` corresponds to the `getHello` transition. +* The contract has a field named, `welcome_msg`, to get the value of this field, the `welcome_msg` function should be called. +* The contract has an immutable state named, `owner` and we passed the value during deployment. To get the value of the owner, we need to call `owner` + +#### Contract Deployment +Now it's time to deploy the contract: +```rust,ignore + let contract = HelloWorld::deploy(provider.into(), wallet.address).await?; + println!("Contract address: {:?}", contract.address()); +``` +The first parameter to `deploy` is the provider. The rest depends on the contract and how many immutable states it has. Here in HelloWorld.scilla we only have `owner`, so we just pass an address. It's type-safe, it means you can't pass an integer or even a raw string to `deploy` function as `owner`. + +Run the code: + +```bash +cargo run + +Ok(BalanceResponse { nonce: 138, balance: 899999994124734000000000 }) +Contract address: ZilAddress("0xC50C93831F6eAB4e4F011076dca6e887288cc872") +``` + +#### Getting contract states +Our contract has `owner`, an immutable state, and `welcome_msg`, a mutable one. We can get these states by calling the corresponding functions: +```rust,ignore + println!("Contract owner: {:?}", contract.owner().await?); + println!("Welcome msg: {}", contract.welcome_msg().await?); +``` + +#### Calling a transition +Our contract has a `setHello` transition. Calling this transition is not harder than calling a rust function: + +```rust,ignore + contract.set_hello("Salaam".to_string()).call().await?; +``` +Pay attention, here we need to call `call` too. That's because everything you do before `call` is like configuring the transition call. For example, you can set the amount of ZIL you want to pass to a transition before calling `call` function: +```rust,ignore + contract.transfer(receiver).amount(parse_zil("0.1")).call().await?; +``` + +OK, now if you get and print `welcome_msg` it should have the new value: +```rust,ignore + println!("Welcome msg: {}", contract.welcome_msg().await?); +``` +The final main: +```rust +use std::error::Error; + +use zilliqa_rs::{ + contract::HelloWorld, + core::CreateTransactionResponse, + middlewares::Middleware, + providers::{Http, Provider}, + signers::LocalWallet, + transaction::TransactionBuilder, + core::parse_zil, +}; + +#[tokio::main] +async fn main() -> Result<(), Box> { + // Create the signer. + let wallet = "0xe53d1c3edaffc7a7bab5418eb836cf75819a82872b4a1a0f1c7fcf5c3e020b89" + .parse::()?; + + // Create the provider with a signer. + let provider = Provider::::try_from("http://127.0.0.1:5555")? + .with_chain_id(222) + .with_signer(wallet.clone()); + + // Call a JSON-RPC endpoint. + let balance = provider + .get_balance("0x381f4008505e940ad7681ec3468a719060caf796") + .await; + + println!("{balance:?}"); + + // Send a transaction + let receiver = LocalWallet::create_random()?; + let tx = TransactionBuilder::default() + .to_address(receiver.address.clone()) + .amount(parse_zil("2.0")?) + .gas_price(2000000000u128) + .gas_limit(50u64) + .build(); + + provider + .send_transaction_without_confirm::(tx) + .await?; + + let balance = provider.get_balance(&receiver.address).await; + println!("{balance:?}"); + + // Deploy a contract + let contract = HelloWorld::deploy(provider.into(), wallet.address).await?; + println!("Contract address: {:?}", contract.address()); + + println!("Contract owner: {:?}", contract.owner().await?); + println!("Welcome msg: {}", contract.welcome_msg().await?); + + contract.set_hello("Salaam".to_string()).call().await?; + println!("Welcome msg: {}", contract.welcome_msg().await?); + Ok(()) +} +``` + +Let's run the code: + +```bash +cargo run + +Ok(BalanceResponse { nonce: 138, balance: 899999994124734000000000 }) +Contract address: ZilAddress("0xB84De4A67E1640D9259c502AAb6751678B593185") +Contract owner: ZilAddress("0xd90f2e538CE0Df89c8273CAd3b63ec44a3c4ed82") +Welcome msg: Hello world! +Welcome msg: Salaam +``` \ No newline at end of file diff --git a/needing-organisation/newdocs/developer-portal/docs/dev/dev-upgrade-v8.md b/needing-organisation/newdocs/developer-portal/docs/dev/dev-upgrade-v8.md deleted file mode 100644 index e58545242..000000000 --- a/needing-organisation/newdocs/developer-portal/docs/dev/dev-upgrade-v8.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -id: dev-upgrade-v8 -title: v8.0.0 Upgrade Notice -keywords: - - upgrade - - v8.0.0 - - zilliqa -description: Zilliqa v8.0.0 upgrade notice ---- - ---- - -Zilliqa version `8.0.0` consists of numerous significant changes. This page summarizes some of the major changes that developers and exchanges will need to take note of. The full release note of `v8.0.0` is available [here](https://github.com/Zilliqa/Zilliqa/releases/tag/v8.0.0). - -## Upgrade Duration - -| | Date/Time | -| ------------- | ------------------------------- | -| Upgrade start | Tuesday 11th May 2021 05:00 UTC | -| Upgrade end | Tuesday 11th May 2021 11:00 UTC | - -## Core Protocol Updates - -### 1) Faster block production rate - -We have made some changes to our pBFT (Practical Byzantine Fault Tolerance) consensus and transaction dispatching and processing implementation. This allows for faster block production rate. - -| | Before `v8.0.0` | `v8.0.0` | -| ------------------------------------ | --------------- | --------------- | -| Peak final block production time | 40 seconds | 29 seconds | -| Expected Tx block count per 24 hours | ~1600 Tx blocks | ~2200 Tx blocks | - -References: - -- [`ZIP-14 - Revised pBFT Consensus`](https://github.com/Zilliqa/ZIP/blob/master/zips/zip-14.md) -- [`Revised pBFT consensus with txn processing implementation`](https://github.com/Zilliqa/Zilliqa/pull/2216) - -### 2) Block reward adjustment - -Faster block production rate will result in an increase in inflation rate. Zilliqa `v8.0.0` will not include any adjustment to the current inflation rate. Instead, in order to preserve the current inflation rate, the reward allocated per DS epoch will be decreased from 275,000 $ZIL per DS block to 176,000 $ZIL per DS block. We will update the `COINBASE_REWARD_PER_DS`as follows: - -| | Before `v8.0.0` | `v8.0.0` | -| ------------------------ | ------------------ | ------------------ | -| `COINBASE_REWARD_PER_DS` | 275000000000000000 | 176000000000000000 | - -Please note that this change is considered an interim change. If the block production rate deviates from the expected value significantly, a new governance proposal can be introduced to adjust the value in subsequent Mainnet upgrades. - -### 3) Payment transaction gas unit increase from 1 to 50 - -As per [ZIP-18](https://github.com/Zilliqa/ZIP/blob/master/zips/zip-18.md), which passed Zilliqa governance vote, the gas unit of payment transaction will be adjusted from 1 to 50 gas unit. We will update `NORMAL_TRAN_GAS` as follows: - -| | Before `v8.0.0` | `v8.0.0` | -| ----------------- | --------------- | -------- | -| `NORMAL_TRAN_GAS` | 1 | 50 | - -When handling payment transactions, developers and exchanges will need to call `CreateTransaction` with `gasLimit` set to at least `50` instead of `1` from `v8.0.0` onwards. As a result of this change, the minimal cost of a payment transaction fee will increase from 0.002 $ZIL to 0.1 $ZIL assuming the lowest gas price. - -:::important - -1. Smart contract transaction gas unit remains unchanged. -2. Developers and exchanges may proceed to make the `gasLimit` change above even before `v8.0.0` is deployed. Until the deployment, the payment transaction fee will continue to be 0.002 $ZIL, with or without the `gasLimit` change. - ::: - -### 4) Deprecation and removal of `GetPendingTxn` and `GetPendingTxns` API - -Since `v7.0.0`, we have released a new API [`GetTransactionStatus`](https://dev.zilliqa.com/docs/apis/api-transaction-get-transaction-status) which -tracks transaction status during the transactional lifetime. `GetPendingTxn` and `GetPendingTxns` will be removed with effect from `v8.0.0`. - -### 5) Non-interactive mode support for seed nodes - -Seed node operators will now have the option of invoking `launch.sh` in non-interactive mode. Operators will need to configure the following environment variables when using non-interactive mode. - -``` -NONINTERACTIVE="true" -IP_ADDRESS="x.y.z.a" -IP_WHITELISTING="N" #optional -``` - -:::note -If `IP_WHITELISTING` is set to `N`, the script assumes the existence of the whitelisted keypair file called "whitelistkey.txt", and further assumes "mykey.txt" as the whitelisted key if "whitelistkey.txt" does not exist. -::: - -### 6) Bug fixes around mining node joining - -We have fixed a few mining node joining issues. Special thanks to [K1-pool](https://k1pool.com/pool/zil) for reporting a few issues to us. - -## Scilla Updates - -### 1) Scilla disambiguation fix - -:::warning -To support Scilla features such as remote state read and external library, user-defined ADTs will need to be non-ambiguous starting from `v8.0.0`. This means -that when calling a contract transition that contains a user-defined ADT, the user-defined ADT will need to be prefixed with the contract address that defines -the type. -::: - -For instance, let's assume a user-defined ADT named `SSNCycleInfo` is defined in a contract deployed at address `0xb55cc7894536ac015350790550b0c03f49eb8ebd`. When using the user-defined ADT, it will need to be prefixed with the contract address (i.e., `0xb55cc7894536ac015350790550b0c03f49eb8ebd.SSNCycleInfo`). If your contract transition has user-defined ADTs, you will need to modify the way you call the transition by appending the contract address prefix. - -### 2) Introduction of new Scilla feature - remote state read - -With effect from `v8.0.0`, a Scilla contract will be able to read the state of another contract by using the remote state read feature. - -### 3) Smart contract parameters change - -To support larger dApps and the need for more contract calls, we will adjust the following constant values - -| | Before `v8.0.0` | `v8.0.0` | -| ------------------------ | --------------- | -------- | -| `MAX_CONTRACT_EDGES` | 10 | 20 | -| `MAX_CODE_SIZE_IN_BYTES` | 51200 | 76800 | - -## Staking Updates - -As part of the `v8.0.0` rollout, the current Staking Phase 1.0 feature will be updated to the new Staking Phase 1.1. - -### 1) Staking contract migration - -Due to the Scilla disambiguation fix, we will be freezing the existing staking contract shortly before the `v8.0.0` network upgrade commences. The contract will be frozen permanently, and the contract states and funds will be migrated to a new contract. - -:::important - -1. Migration to the new contract is expected to take up to 7 days -2. During the migration, the existing contract will be paused and no staking activities such as stake withdrawal can be conducted -3. Rewards for staking will be retroactively distributed after the staking contract migration -4. For wallets, explorers and exchanges, please note that the contract address will be changed and you will need to update it on your end. We will provide the address once we have deployed the Mainnet contract -5. We will make Staking Phase 1.1 available on the public testnet shortly to help you prepare for the staking contract migration -6. For community members, please kindly wait for your wallet provider to update to the new staking contract if you encounter any staking issue - ::: - -### 2) Switching of staking wallet - -The new staking contract will also have a new `swap delegate` feature which allows a delegator to swap his wallet address with another address without incurring any unbonding period or rewards penalty. - -### 3) Staking parameter adjustments - -Due to faster block production rate after `v8.0.0`, we will be adjusting the following parameters to bring rewarding and unbonding timing back to parity. - -| Parameters | New value | -| ----------------- | ------------------------------ | -| Rewards per cycle | 1,548,800 $ZIL | -| Reward cycle | 2,200 final blocks (~1 day) | -| Unbonding period | 30,800 Final blocks (~2 weeks) | - -Please note that this change is considered an interim change. If the block production rate deviates from the expected value significantly, a new governance proposal can be introduced to adjust the staking parameter accordingly. - -### 4) $gZIL ending period - -`$gZIL` minting period has been set to end on block `1483713`. This value cannot be changed. With the changes to block time in `v8.0.0`, the ending wall clock may vary as a result. diff --git a/needing-organisation/newdocs/developer-portal/docs/staking/phase1/staking-phase11-notice.md b/needing-organisation/newdocs/developer-portal/docs/staking/phase1/staking-phase11-notice.md index 00cb2b38e..062c41129 100644 --- a/needing-organisation/newdocs/developer-portal/docs/staking/phase1/staking-phase11-notice.md +++ b/needing-organisation/newdocs/developer-portal/docs/staking/phase1/staking-phase11-notice.md @@ -89,5 +89,4 @@ For more information, please refer to [Transfer of stake deposit between account ## References - [Phase 1.1 staking contracts](https://github.com/Zilliqa/staking-contract) -- [ZIP-19 - Seed Node Staking Mechanism: Phase 1.1](https://github.com/Zilliqa/ZIP/blob/master/zips/zip-19.md) -- [Zilliqa Mainnet V8 Upgrade Notice](../../dev/dev-upgrade-v8) +- [ZIP-19 - Seed Node Staking Mechanism: Phase 1.1](https://github.com/Zilliqa/ZIP/blob/master/zips/zip-19.md) \ No newline at end of file diff --git a/needing-organisation/newdocs/developer-portal/sidebars.js b/needing-organisation/newdocs/developer-portal/sidebars.js index 44922b99f..b44b119c3 100644 --- a/needing-organisation/newdocs/developer-portal/sidebars.js +++ b/needing-organisation/newdocs/developer-portal/sidebars.js @@ -75,7 +75,6 @@ module.exports = { "dev/dev-started-helloworld", "dev/dev-started-env", ], - "Upgrade Notices": ["dev/dev-upgrade-v8"], "User Key Management": [ "dev/dev-keys-introduction", @@ -90,6 +89,7 @@ module.exports = { { SDKs: [ "dev/dev-tools-zilliqajs", + "dev/dev-tools-zilliqars", "dev/dev-tools-gozilliqa", "dev/dev-tools-java", "dev/dev-tools-sdks", diff --git a/products/developer-portal/mkdocs.yml b/products/developer-portal/mkdocs.yml index b3f5bc6b3..6cebb7557 100644 --- a/products/developer-portal/mkdocs.yml +++ b/products/developer-portal/mkdocs.yml @@ -111,6 +111,8 @@ extra: link: https://twitter.com/zilliqa - icon: fontawesome/brands/youtube link: https://www.youtube.com/channel/UCvinnFbf0u71cajoxKcfZIQ + - icon: octicons/server-16 + link: https://status.zilliqa.com plugins: - search @@ -222,6 +224,7 @@ nav: - Ds Block Listing: api/blockchain-related-methods/api-blockchain-ds-block-listing.md - Get Blockchain Info: api/blockchain-related-methods/api-blockchain-get-blockchain-info.md - Get Current Ds Epoch: api/blockchain-related-methods/api-blockchain-get-current-ds-epoch.md + - Get Current Ds Comm: api/blockchain-related-methods/api-blockchain-get-current-ds-comm.md - Get Current Mini Epoch: api/blockchain-related-methods/api-blockchain-get-current-mini-epoch.md - Get Ds Block: api/blockchain-related-methods/api-blockchain-get-ds-block.md - Get Ds Block Rate: api/blockchain-related-methods/api-blockchain-get-ds-block-rate.md @@ -229,6 +232,9 @@ nav: - Get Latest Tx Block: api/blockchain-related-methods/api-blockchain-get-latest-tx-block.md - Get Miner Info: api/blockchain-related-methods/api-blockchain-get-miner-info.md - Get Network Id: api/blockchain-related-methods/api-blockchain-get-network-id.md + - Get Node Type: api/blockchain-related-methods/api-blockchain-get-node-type.md + - Get Num Peers: api/blockchain-related-methods/api-blockchain-get-num-peers.md + - Get Sharding Structure: api/blockchain-related-methods/api-blockchain-get-sharding-structure.md - Num Ds Blocks: api/blockchain-related-methods/api-blockchain-get-num-ds-blocks.md - Get Num Tx: api/blockchain-related-methods/api-blockchain-get-num-tx.md - Get Num Tx Blocks: api/blockchain-related-methods/api-blockchain-get-num-tx-blocks.md @@ -247,6 +253,7 @@ nav: - Get Num Txns Txepoch: api/transaction-related-methods/api-transaction-get-num-txns-txepoch.md - Get Recent Txs: api/transaction-related-methods/api-transaction-get-recent-txs.md - Get Tx: api/transaction-related-methods/api-transaction-get-tx.md + - Get Soft Confirmed Tx: api/transaction-related-methods/api-transaction-get-soft-confirmed-tx.md - Get Transaction Status: api/transaction-related-methods/api-transaction-get-transaction-status.md - Get Txs For Txblock: api/transaction-related-methods/api-transaction-get-txs-for-txblock.md - Get Txs For Txblock Ex: api/transaction-related-methods/api-transaction-get-txs-for-txblock-ex.md @@ -267,8 +274,6 @@ nav: - Introduction: developers/getting-started/dev-started-introduction.md - Helloworld: developers/getting-started/dev-started-helloworld.md - Environment: developers/getting-started/dev-started-env.md - - Upgrade Notices: - - Upgrade to v. 8: developers/upgrade-notices/dev-upgrade-v8.md - User Key Management: - Introduction: developers/user-key-management/dev-keys-introduction.md - Zilpay: developers/user-key-management/dev-keys-zilpay.md @@ -278,7 +283,9 @@ nav: - Developer Toolings: - Ceres: developers/developer-toolings/dev-tools-ceres.md - SDKs: - - Zilliqajs: developers/developer-toolings/sdks/dev-tools-zilliqajs.md + - Zilliqa-js: developers/developer-toolings/sdks/dev-tools-zilliqajs.md + - Zilliqa-rs: developers/developer-toolings/sdks/dev-tools-zilliqars.md + - Pyzil: developers/developer-toolings/sdks/dev-tools-pyzil.md - Gozilliqa: developers/developer-toolings/sdks/dev-tools-gozilliqa.md - Java: developers/developer-toolings/sdks/dev-tools-java.md - Sdks: developers/developer-toolings/sdks/dev-tools-sdks.md @@ -286,6 +293,7 @@ nav: - Cli: developers/developer-toolings/dev-tools-cli.md - Explorer: developers/developer-toolings/dev-tools-explorer.md - Faucet: developers/developer-toolings/dev-tools-faucet.md + - Scilla Parser: developers/developer-toolings/dev-tools-scillaparser.md - Other Developer Information: - Dev Wrapped Zil: developers/other-developer-information/dev-wrapped-tokens.md - v9.3.0 Miners rehearsal join: developers/other-developer-information/dev-miners-rehearsal-v93-join.md @@ -478,4 +486,5 @@ nav: - Diagnostic Data: contributors/core-protocol-design/mitigation-measures/core-diagnostic-data.md - Status Server: contributors/core-protocol-design/mitigation-measures/core-status-server.md - Ecosystem: ecosystem/index.md + - News: news/index.md - FAQ: faq/faq-introduction.md