⟁ Tendermint Core (BFT Consensus) in Go

Overview

Tendermint

banner

Byzantine-Fault Tolerant State Machines. Or Blockchain, for short.

version API Reference Go version Discord chat license tendermint/tendermint Sourcegraph

Branch Tests Coverage Linting
master Tests codecov Lint

Tendermint Core is Byzantine Fault Tolerant (BFT) middleware that takes a state transition machine - written in any programming language - and securely replicates it on many machines.

For protocol details, see the specification.

For detailed analysis of the consensus protocol, including safety and liveness proofs, see our recent paper, "The latest gossip on BFT consensus".

Releases

Please do not depend on master as your production branch. Use releases instead.

Tendermint is being used in production in both private and public environments, most notably the blockchains of the Cosmos Network. However, we are still making breaking changes to the protocol and the APIs and have not yet released v1.0. See below for more details about versioning.

In any case, if you intend to run Tendermint in production, we're happy to help. You can contact us over email or join the chat.

Security

To report a security vulnerability, see our bug bounty program. For examples of the kinds of bugs we're looking for, see our security policy.

We also maintain a dedicated mailing list for security updates. We will only ever use this mailing list to notify you of vulnerabilities and fixes in Tendermint Core. You can subscribe here.

Minimum requirements

Requirement Notes
Go version Go1.15 or higher

Documentation

Complete documentation can be found on the website.

Install

See the install instructions.

Quick Start

Contributing

Please abide by the Code of Conduct in all interactions.

Before contributing to the project, please take a look at the contributing guidelines and the style guide. You may also find it helpful to read the specifications, watch the Developer Sessions, and familiarize yourself with our Architectural Decision Records.

Versioning

Semantic Versioning

Tendermint uses Semantic Versioning to determine when and how the version changes. According to SemVer, anything in the public API can change at any time before version 1.0.0

To provide some stability to Tendermint users in these 0.X.X days, the MINOR version is used to signal breaking changes across a subset of the total public API. This subset includes all interfaces exposed to other processes (cli, rpc, p2p, etc.), but does not include the Go APIs.

That said, breaking changes in the following packages will be documented in the CHANGELOG even if they don't lead to MINOR version bumps:

  • crypto
  • config
  • libs
    • bits
    • bytes
    • json
    • log
    • math
    • net
    • os
    • protoio
    • rand
    • sync
    • strings
    • service
  • node
  • rpc/client
  • types

Upgrades

In an effort to avoid accumulating technical debt prior to 1.0.0, we do not guarantee that breaking changes (ie. bumps in the MINOR version) will work with existing Tendermint blockchains. In these cases you will have to start a new blockchain, or write something custom to get the old data into the new chain. However, any bump in the PATCH version should be compatible with existing blockchain histories.

For more information on upgrading, see UPGRADING.md.

Supported Versions

Because we are a small core team, we only ship patch updates, including security updates, to the most recent minor release and the second-most recent minor release. Consequently, we strongly recommend keeping Tendermint up-to-date. Upgrading instructions can be found in UPGRADING.md.

Resources

Tendermint Core

For details about the blockchain data structures and the p2p protocols, see the Tendermint specification.

For details on using the software, see the documentation which is also hosted at: https://docs.tendermint.com/master/

Tools

Benchmarking is provided by tm-load-test. Additional tooling can be found in /docs/tools.

Applications

Research

Join us!

Tendermint Core is maintained by Interchain GmbH. If you'd like to work full-time on Tendermint Core, we're hiring!

Funding for Tendermint Core development comes primarily from the Interchain Foundation, a Swiss non-profit. The Tendermint trademark is owned by Tendermint Inc., the for-profit entity that also maintains tendermint.com.

Issues
  • Tendermint became unresponsive after some load

    Tendermint became unresponsive after some load

    Tendermint version (use tendermint version or git rev-parse --verify HEAD if installed from source): v0.25.0

    ABCI app (name for built-in, URL for self-written if it's publicly available): https://github.com/MinterTeam/minter-go-node

    Environment:

    • OS (e.g. from /etc/os-release): bug is platform agnostic. Tested on MacOS 10.14, Debian 4.9.88-1+deb9u1, Ubuntu 18.04.1 LTS
    • Install tools: -
    • Others: -

    What happened: After some time under load nodes stop responding. http://localhost:26657/status and some other rpc endpoints became not available with huge timeout (more than 60 secs). It seems like ConsensusState's (or ConsensusReactor's) mutex is deadlocked. Restarting node solves problem.

    Strange thing is that this bug happens when block is committed and new block is not even started (no BeginBlock call to Application).

    What you expected to happen: Tendermint should be working normally.

    Have you tried the latest version: yes

    How to reproduce it (as minimally and precisely as possible): Download Minter node, launch and synchronize it. Then send some transactions (50 txs in block will be sufficient).

    Logs (paste a small part showing an error (< 10 lines) or link a pastebin, gist, etc. containing more of the log file): There are no errors or warnings in logs, except that node starts to lose connection to other nodes after consensus stops.

    Config (you can paste only the changes you've made): Default config

    node command runtime flags: -

    /dump_consensus_state output for consensus bugs: dump_consensus_state is unavailable by timeout :(

    Anything else we need to know: Tendermint is running in in-process mode. There are Local RPC calls to Tendermint. Bug happening only under load. I debugged our BeginBlock, EndBlock, Commit, DeliverTx implementations, they are finishing normally just before bug. It happens somewhere else. Also, we used v0.23.0 in our testnet before and everything was fine.

    T:bug C:consensus 
    opened by danil-lashin 93
  • Why `Vote.SignBytes` is a JSON string?

    Why `Vote.SignBytes` is a JSON string?

    I'm trying to implement a custom blockchain using Tendermint, and I want to have a Relay contract on Ethereum so that my ERC-20 token can transfer between Ethereum and the Tendermint blockchain.

    To do so, I need to write a smart contract on Ethereum verifying the block header from Tendermint. While other parts go well, the format of Precommits annoys me.

    The signature are signed on the SHA-256 hash of the SignBytes, which are JSON strings, so to extract block header hash from the message, the smart contract needs to parse the JSON string, which is quite expensive.

    I'm now finding work around on this problem, and my question is, why Tendermint is designed to sign a JSON string instead of a binary one, say a structure encoded by Amino, or the Merkle root of the information in the precommits (just like the block header hash)?

    C:consensus S:proposal T:enhancement T:breaking 
    opened by nnkken 84
  • Make each golangci-lint linter pass

    Make each golangci-lint linter pass

    From .golangci.yml:

    • [ ] gocyclo
    • [ ] golint
    • [x] maligned
    • [ ] errcheck
    • [x] staticcheck
    • [x] dupl https://github.com/tendermint/tendermint/pull/3385
    • [x] ineffassign https://github.com/tendermint/tendermint/pull/3386
    • [x] interfacer
    • [x] unconvert
    • [x] goconst
    • [ ] unparam
    • [x] nakedret
    • [x] lll
    • [ ] gochecknoglobals
    • [x] govet https://github.com/tendermint/tendermint/pull/3292
      • [ ] remove https://github.com/tendermint/tendermint/pull/3292#discussion_r255386460 when we bump Golang version
    • [x] gocritic
    • [x] gosec https://github.com/tendermint/tendermint/pull/3294
    • [ ] gochecknoinits
    • [x] scopelint
    • [ ] stylecheck

    Run make get_tools to install golangci-lint or follow instructions at https://github.com/golangci/golangci-lint.

    Run each individual linter with: golangci-lint run --no-config --disable-all=true --enable=XXX. For example: golangci-lint run --no-config --disable-all=true --enable=govet

    Run all with: golangci-lint run --enable-all=true

    Help make Tendermint great again!

    good first issue T:enhancement T:code-hygiene 
    opened by melekes 47
  • question with get_vendor_deps

    question with get_vendor_deps

    $ make get_vendor_deps --> Running dep dep: WARNING: Unknown field in manifest: prune grouped write of manifest, lock and vendor: error while writing out vendor tree: failed to write dep tree: failed to export github.com/ebuchman/fail-test: unable to update repository: : command failed: [git fetch --tags --prune origin]: exit status 255 Makefile:51: recipe for target 'get_vendor_deps' failed make: *** [get_vendor_deps] Error 1 [email protected]:~/go/src/github.com/tendermint$ make install CGO_ENABLED=0 go install -ldflags "-X github.com/tendermint/tendermint/version.GitCommit=git rev-parse --short=8 HEAD" -tags 'tendermint' ./cmd/tendermint fatal: not a git repository (or any of the parent directories): .git cmd/tendermint/main.go:9:2: cannot find package "github.com/tendermint/tendermint/cmd/tendermint/commands" in any of: /usr/src/github.com/tendermint/tendermint/cmd/tendermint/commands (from $GOROOT) /home/zhr/go/src/github.com/tendermint/tendermint/cmd/tendermint/commands (from $GOPATH) cmd/tendermint/main.go:10:2: cannot find package "github.com/tendermint/tendermint/config" in any of: /usr/src/github.com/tendermint/tendermint/config (from $GOROOT) /home/zhr/go/src/github.com/tendermint/tendermint/config (from $GOPATH) cmd/tendermint/main.go:11:2: cannot find package "github.com/tendermint/tendermint/node" in any of: /usr/src/github.com/tendermint/tendermint/node (from $GOROOT) /home/zhr/go/src/github.com/tendermint/tendermint/node (from $GOPATH) cmd/tendermint/main.go:7:2: cannot find package "github.com/tendermint/tmlibs/cli" in any of: Makefile:23: recipe for target 'install' failed make: *** [install] Error 1

    opened by ying2025 35
  • Blocks are not being build on new tx

    Blocks are not being build on new tx

    BUG REPORT:

    Tendermint version: 0.20.0-27bd1dea

    ABCI app (name for built-in, URL for self-written if it's publicly available): kvstore App

    Environment:

    • Windows:
    • binary release package:
    • 4 Nodes - 3 validators 1 non validator:
    • empty_blocks=false

    What happened: No Blocks are build on new tx

    What you expected to happen: Blocks being built on new tx

    How to reproduce it: Setup the Nodes as described (can be found in my github repo): https://github.com/yuomii/nodeTest/tree/master/nodes start with tendermint node --home="HOMEOFTHENODES" --proxy_app=kvstore The quick and dirty Websocket Transaction generator i wrote: https://github.com/yuomii/nodeTest

    • in Main startAllTheThings() set Thread.sleep to 500 ms (2 tx per second)
    • in Communication sendMessage() set new bytes to 10000 for 10KB generated tx size
    • run Main Method

    Console output: This x1000

    I[06-18|12:57:44.453] Could not check tx                           module=mempool tx=Tx{5EDF7865672344A7BA937383E194A2F736996AEDAFEF2E93160CEDF09C44EDA95F94F1250DFC747FBA44924B660B0093D3CA8BAC61C4C911A81768188C08F73C60500C5593A8A2E8A22C35FC031655FF8AF5640FA31F9A7CA7B012419B833288AEB4ACF8FE876AFBBE81D24F74D1BFA86A4D3D5D132955C0F1D2B54BB01D15653CB2840A263AFF9D9C8C1B3D6A399E81692CCD8964021884E7EC7DC4E598FE081F5A09743666B8F4902C8B0E0893473BDD6ADF1FD9759D9BED2B9D9C0AA40E66123E01392ED16461316C909669A798A304489500CEF40AD0EDD83A741F3D2AF9F3604ED461C45829DA25C75118CEDCC07DE20E5330E6EE5CD5C441ABDEE35A6D44B7D5DCF7C3721F2AB8F04495C7DD2CCD407AF6FF444AD814C5DFEF2E9CF197AB37A6226C95905C84CA9EA8D76724BFDCE9CA46D38EBF7D2140C849B1C01794727BC1960F962E269021C200C510B4CD750D9C0A550241FEF4C98BB137A5B72F07EF277A84612BA0B8838F12BCFCCA2AC93CFFEEC12DD8068BD0961B4909E76E7D920A8343C8E9CBACAD6C470C59718DEDB2390C6ACD60AA6758A97E9F5A3DA60A4A44E116164BA4DE56D76F7B30E141572DB28C36FA50BB0CC9D9C5AAC7BF8F87BE7C4D9FA83BDB07467885C02511D6655491B51EA8E8EB84C974CE0B224DC9F3CD9698D0D5CBDAA075D4FF09FEEBF5D6B3D63EB074623CDD2C4C8A1A91B35EF08B4C8371220F316A484E8B76FBFED14E43E41E8DC5FFD7A6EE461F6014DA5C45D21A009DC83B7BE7CD68769B07A93AD77EC2ABEB360A03763F44651DD6A7EE5A61DE63458EC439DE167FF502AE14115B0F9F3A135A242566A1A373C34D932FBF90C473ABEB66B4DB996171A7E686CE2B034834E4C3834C92140408783203B3A58F71B1E981673AACA78B717AB0CCA97B96A5EB4F6BEEBF9B530C70983DEBBA63357EC068E17698E5EFE256E07BD151E38B7461D957955627204E4831BD4E3BF261AF4269A0F8925D1533083365A84BDF14C3861CA02656609F96D286F6921372EE881280C1A690AF52D7E53D3F92C1504AF27D45B8B08871C63DDE8D58CB59A32D1E56136ACB66BA2E44D6C16DCAF7FA343ED0981031150DD7463D717E692F6DFC417EDFE88A6521416301F28F24AB04660E8CE803E866E8EB63891002FB59586278E8740CF857CC06F3DCFAFAC4547B1F91C61F16CC183B952E8C7D1EDFC514C24B84B4C9EC2865C65C8075047EADCE0C6309BC82B66B448527F67F221E2CF399E78E5832E142DC84B2D2F31C9CD2538B45CB501B2347C44C4F3011B3CC4F6AD41A326BBB3A8EE409C70979BA2A1DC182253100769D257F276AFCE0DDA4AA94A82396CCD3CD2673F4911D0013FC13B4CDF4FA066C3597BFD84048D0FBBEEBAF0AE7BFB1CA8B7E46DF5147F5A6FDDF2D3218AE30E89435D29770107863945E9CAC75671F0697A85B951E60B89BA3510FEA6BC55F0591FE870C9C6FA1EBB52B638E00CD738937F57456DDF61DE674D5A3BB20ED0A7D500BB55B0FFFCA3DE067AD1E9F74DCCB69DC9B2BC941EE4402AD15A2F316B8656183B543297EA7F8571148EB889BDEDE0172994B01A4660BD260F40582818941587CE3481B4E9EA2B76EA7E1A42BD0E49C437D8FCF5BB7BB0AA7B685BCA3AE5CD22F20F2D2AF486C99BD601F90EC5FD7DA8D1BF798128571E6E9324EBA4BED7BF59253151EDAF6C2C6C2AC527EB3099E9A2B8A3DAA736A1C393024036F261EDBC6E3E3335CEE2AB3D798EAAA955DA374327FA57D52A3708A9369AC370554B07BF3313FE74E8A191B6C0D1C59A872D4A1DEDA8BE6FD6B9A42CD06CF76DFA225C3E341565DDB3530AD68F868A06D68977DE09A2080423B5B2FFF56F5DB81899169346A1FE5CE338CC2E13B98769CA0BDC707398AFF10951C193958693BE6FD1FB8EE34138BF84C80FD9D869AB48966694EA01EB4AB7B77BBF07B8ADCDAFCD68C171A9FAEC5290513BC5A8602D72B6392E4FDDECE51C54507EAC2DAE3B95B7BAAEE80CAF131F0497F5A3CF2834EA63884A820D2CB49AA35456625EB746A5E3EDFD0C2D6E35F1A13B34514B97A60BE385F9A2BBCE18A15E6AEAE5BD46D7938F3A3FC0D600BAF599DD2DD66AA6397DB739682A74B0DD0B3BAEE7E30FC0D67BCEB052A1AD3F83A93DFB2285B2461C375B07228CCBD8CCC16D4A75FA9C3792FD9CE27A93E5FBAD7B19B5E54FEABBA8A12358DD849E563705A00ECD0EF9E39631071BED0BDD0661E0BF4950985D8598A34B1573B4D25D93C7ECCC64445A0B8CF661F93BC9F069589A9BE488E74A54B06DEFB957BB7AFF7A8E4F2B3E98B9EC7B7919B045CB608E5A10DE820B8DD12422A89D0DCBCC47A0F96AABF22452EE71A9C625E83D0A4FB773A3817F5AE13F615DAB72D1AE29AEF32D4C8A7F89D6FDAC993B393161C04526FBD0F6D587F88003E127D7A0EA47A48B8B6313C0D376FE8D13456A9D61FFFA2788872A90A7DB94D5AD8A122CBF78CF2BCB85CD6B0596824910CC73870EAFF7F3D5988388375553CADBB47EB39C5860C9E31F2D71F30F90A4DA8A789A756487CF1C924AB6CB206F29CE52ADC94ED9C487F19891B10707A27AF2D41E9CFF98F5AC8DD4CE525CC8AAC30BAE53BEBA1820DC8DDA8402BD5B1FB41839199546201FE7C9D31DE404C02EE9A08D8C7A2096CAFA34581D18E6B69ECF308A52831A6304DC9C331250420A2A5A9CB9302F1384FFF80660ADD48AAB5FC9BE03E977941E5AEF079B47FEBDA30B1557AF12D6277DD3B92A87E84DE5DF4D070C611D4D244D1293824EFDB24C9F97638E82D4857D6EEA450DB6027C862CEC98F790BB7F5D38F79683EE88411D21FE310B6B32D81175A8FF459804DF52FC60677B474D630F4849C4F4849FCCA2A7AC63F5272D36AE372DCFF3FAD2A43311DC78CB5E745E4AA78773DC2D11E99D864704B89E467ED4FA825B3AD0E9C08F219EF97575F8D066C072D87397D407C032F605EA6280BB8B6FDC1981C4DCB8C17F96E44BAE0ECA2D841B00665AEBDA7181116C623CCB8D1DB5708F7C302388C2B13E8A27A814F54CD15EB9851F116FFBCD45E76EB2CF00E64D8D6620D24C4B9360134A77BCC26CDC05A8A9E9E260D9F8F98F0842792A29B9BC1742A195284372BCA60AA3EC7C554729B227DCA295C57BC59D2A9A25EF0788C9C59E75249811E1F634CE7CB19B942E8F6E91D8F44A2285E2DD3C4B8FE48F9649B41F515DE4BFD560C49FF2A1B0885BEB2B46D4E01BBC9B1534957D77393442E723CF16139415220551B756BC4401EC5583BDD8E2E5425188F6C088E9F1FD6D21F113F9F47A1137CD031323DCCAEA3EE79F2E28725CCDBE868E2222FB042FF74616687738B252899C42D01196D24BD8E70E575BEA578BD144E7E120051AB6115CA9C34A6C69AEE1E5FB314F99749ABE8BB1694B1D74D5198ADCAEAF97FAC7589B82CF4142B1CB54738FF7DA1957CBE0DCFE1C096487D53BE82ABE1192BF805C2A5A73BB805F343CB2EEEB67858EDDB0B6DBB7E26F10C3132F54DD041F784B3618531BFB715CA5099E6FB1AF000C3FC6BEC76D67899968EE2F8A3B6A8D2A471A33264FD8E01D80864743B697C56C9AF00FCE7D7F12B58BFB317DE36DB34A407912314B3419CE08CFAFF74481E375A9504C351113EC97D5102CFB0144C2EA49189DC5A64A0EC7071736762BE7A3FF5E4887695195FAF1681F52AB6BC74A9C3FE17DEA0D79C28863F272D7CB9832D3EE633BE7B08C84576C2A189E7BB857F169219071E98AE16E4F37A3AE787B0BFE8784F82C5FD89E0DA3BFBAFFE43A7425B6434A56C764787BB7D7A41DB5DC6126F8C27FDE996900C1446989A88ACC9DFDAE19DAD580358D8E54343C748D430C04DA7B829897BEE768AF343B497ED057A5F4731D80918E4B4E69C3E219D66EA3EE763AEE9A2D439C17B82605C4E278E21BA2BD696044EA78219562CEF41F5F4481EEEB17C94CDF8D474ED19E7ED1B2E48E1F436234385C92FEC31FDDBDC4562472D8A0823B7191E88155C6881B1AE5B154C5DC71CD561A352CD627DAF637DEC063F0B82053C6C95A4F0AEE2A27F6CD7FBD0F71A7109C892CD7F11CFFACFAB1E37D35CB7BC8A00E0A4EBF760F76703DD32F8A48B882365DF68DADBB4E99C3D0D7607FA9811F911C1B7D9FC6EEAF6C3E3F4641D30F10128AF149650AC0241889EEA73774DD12B61FADC2DB98E3EA325EFA5B26E2202EAC40AC5B176D8DF844463AF68F95FCED1B5182D88DB4A5AFD416F43E5751631E130F2191F44BC2AEF0DFF8FFFB83E69B355509E92471935D356B1BF566640149A278145DF28C5647DE420DBA383093A429069D819910D0E2F46E02ADD498B4A00A823E27382A54688AD0B4B683CB0B5ED36BDE98E865B56F21795CBBF7B1FC4DB76DAAA8B277FC001AFAE46C15761E8821C41EF26A2A979D173F788F3293925D9988F471FDEDDE431174EFDFF5F489FC69CA4019E9A336EA0286E4801D84E3D82DA7A9FC6E68148B775BB1E39729C9B4A127DF93AD4BC3633AADF20EBE087CC564B9663EB6EFAA0D63C1E3218C0FEA8376082DC11EA52C0908C82855FEC821143BE22C3A11C10AC14464CCD7E0F29B1676ADB05AB2BE0C5D90B3ECA8B7B6CD926493C7C5C87FFA9AC4FB22EB53AEC26B49B7A5B251A8EA310839AA3E962650CFDC87EBA65BD83F4B475CCFB5FAD7E62CE5F8A22A2EDF743E2F74184754839F0785BBA7502BEB07CAABF2E2665EB1AC950A7E944490F2D91AB8D10FAD529659B9BE3B7426AFE9D39AB921D396809EED9F868B8197D9E83133A10B56C1ED46D52D9890DC849E7E0D1DE3DB6918C30567A231CF402E5EE3AA8316DE1DF016D86C9E33803495A55D7096C6FA743BA1E711BB63F2472CE04EE7994360B9B7CEB8684131E87F8B418C2C0E0BB79ACB8A5FA9298D31626041BD6A4A522BCD8359B32CFB72F3206ED75AF86211B68F70F2B7BC1C4DDACB3A323DD30428B72DF1C9BCE074AA25C97A7A63515CD6AC813C929C65FBAE5B6ABA93D804BD7EE11260F6008369E72421E5D55FD347FE903E0D1ADC88DD67AE1EFE44082EB4F6EE365A7312C28B0DE37C12B251CDA85BB1F8B01D7A7FCA7ACB108C2376E48AF5226BCAFA9AB9099E9EDC326293F816A68D56E775F2FCED990918EE7E1E9CF9083303D1339F4DD92DAC6245B6BA517295E3BE4540E9083B8C0ECF7EC30D882710F1F9B95A395C69DBD3AE0D567EAF70C6BFDD4A0406E95A5D85C5E8DCA4BE479A916C20980B8C39DE14B8C548DA0C5F344250B7A69408F07FAE50C988B49E47A26148C3ABBE4F32F590B3EEDC2BB31250273819B8CFDC7654B43E988015B70F3014DEE3A141820897B2DEBE6DFCBF105A045369CC51B126874430A23EFF0933FD81F425D9F2CDDFD63AEB92F310774AB7E134342C1DEFC6321350DA0CA955285EC948BA3428F039E7186EF5AF7241ABDE1723AB741F680FA8563FC063FF0A58EA56EDF143A46F779C76E74D4E807051F70B20E6A9B6C320AD5A2D805AB9549830CCA4A0696477ABDCCB51704AA38BB99B90103F139E551E3C8EC1739A1AC3E60504FDE0FBB1F03C9AB230C6F5C303411AA29694C172B573C1E0DAB24685F311E42F2BE18DEE7D1D7D5EE4B820D7312E518D52D81490FCFDE165E5C427B1E2AB3D8425E9F8D8C3D8E7BC0D694427A16C33B6975A07397A665F594997107B3347FAD4D3C252764F30014C9FBDC746F148C306ECBF74F7C3DAF869EFAC47021E73E7F0CD56F5F152363DDE4218890B6F6EA7687A6532BF8D9D6958B1722CC5BF251B0669B22BDCDD08E54D0BFE0754897E471FC42F468E557A2738D7F6866C426FFC6C123101DC8C707BD6C767279DD79F6EBD01513FC2C2D527502E3DC3D809662EC21E0822D23E7EE9D147F68E5E7B0518E6D5A9DF1841DAB7592C2658299BFDD6FDA0FA8F307C3984100E0F6745E775E6BD87C16E47E37E24F5B35BF1EF2E73441CEC4394620D41F38BA187BD85649FC767D626B86E6F4CC652D982B290615007840207F505DAF57D5A33825357085E10787D3DD1F7098581CD8374F747E49B9D03429BC120E00FCAE899166A40DE1145AC6861506B722D55D8648D50093F27C2560DE34E0453ED320487817B26039BA102C92D22A8C7811152BBC34853DAF84FBA865F9E1925BC2C87FC541DE438B53ACD041B38C94949FB5FDC96BEC3BDB7FF6377BCB9004E07B0B5A08C21EE51B26178D97FDC237DED8B20639D1D5E287306218828F3E82318A8F5D9D7D5A401CAB1D23F56276DEFF6306BCBF2A12C0CC1EAC68D8E58D71FFF1C0521BC0F06951D2EEF5B242E580D60EADAD0A102A0D9AC7E61A51BBF6AC0C8F4C38C86E2FA98B649E52A506618554C829423C42D7F176674745F5D944CAD19AA7470825DC62F602A448D2D2D0EE7167FF82F7078896D564A9026FC517B1B1818809F9F8B0D38A175F12DAE72ADB83B538F947CEE006E7680AE3BF786381BA486A7AAA9BD79A2F8A8C0DD4C5FE5195E3E199F84635E418690BEC24EDEEC92C4B0C3FA8C472144F35D143A253EE629B2B8BC22BFD12E8A63E74294AACD50E4304F1E8C45C1684EEE33683FD0C2E949EDFCB4546E1B536EAECAECD2F1207A0F3EEE14A59A84B0F901AA706BC7F09A13392BB877F9D9281506247E2624DC8BFA64266DD69C50F88690B73AE142F5C88DD5478AAA89CCEF9245372886B9E30191B795033642E5007BADDD0C8E04919EB3242A2CAFC8CC41295C884C992D1AA86F216327E6696755748DF546A1E7FC6BAE0AADF4B0CD184149B2178F761707528A125E2224360D62E544E7D5635A2FB37E445573515C14F7EB88E6C9D7DB226CBB82AFD5DB2253F3A84292B78C0BEE84096B5399E5AD71C39AA842200BEC7249ECA2D60F8634072F79ADA21EADDB1CCEF618C352A4DE2169A803D802EA7AF2B3A598BB00BE30AA15FFC9F878F475D7F8940BD0196961F1C35C52210A2A274CAF794E8D4D67D9BF8614E506B3CB60EE9BB540DD5535AB3407F98E6816F9C4BE595DC9875A2A30F112EBE723B6E51C4882C3FADEE373D474941F1242407E6CA33303C2B85B56A1A7D4EB4AD4C942D8DEF56069A0E3506BD31DA67A16F858025C18564A3B559306D4293013D57E81A6341BBABC6FA28EAC8A75137997E93301A6D8FD416FDEF84BD58CCCE77F6D64681BA5CC858FBB8D4F78D3A5E2C8DD7FD0F6C662F041815D69F2B54D96D2CF871692690CA735E3E401E7B6509947FF5FFABC47AF8BF05D6882A1C6AC64ADA97BC7F681AAF27F4C26E6C3A63B2B75A1F9B06D21930BF87F47559005D977D4BCE4B63F59E4F19930D166D4BD79BB5C9358E88C6448A5DA63BFA759F858899A92849F0565EA06392BED0035E9A951E9978746223D739FA2CE40C5C3611E58485E1FE25AA447702517CE618DBAC32F83CC79C8340FD89EB29090E51F69B99D153A912022148B6D0AF2F3D005CF9DA13497158EFC9FABFD6702C3F45839B8F0AEBFE20C08217F3C4925085D131E762ECF99623523E41FF6E18CB17C575991B580A183BD3A618F6A06342F3D7DABC1207AC1949C272D6297BFB01E893DA3D081DCF59095DFAB6AAB98FC017F891D247C8621CE4A90D0BF7473A427BE5B22908153E6194DC01025BD6075BA96ABE9419C7431461F20B81BA58B715AD7072A1980CC09BF64CD09B5067C10251738056ACEE1869E0AB3B82953E99F3212182079F81A16F78F291F7347D34A6CBCA2BF41B27CFA51C95C1A60CFBCC249602BF264B5B91F4D8A200E8CAFBE0DDF24BC44528D3FA38B61A95CB3B387EB8741CF94C086F243CC56BF17DDB7BC4A87E1387610D2B50C5069F025922EEA388A858763587B7522AC018C8367031E63892AA62AE31602B02DE1D27D9C1C1724ED93C6DC32AFAF7DDFC3FFF7AB4F4CFCF650477C69380092CCA8979DE0888E7C686318C8C611654A9ED2BA46C183D0CAB9F0F9E2922440C05CE923F3AC4DB3FE7B34E7333B6618C9A892DD8058F77AE002E5CE0BF66497A65A6E0158310A37E21142A3792A04228948AA1518701A2CB0BB4DEFD2B30CA3D5C012D6AEB05B6ECB8ECEEE0B461B394F52539D836527FFB28DC2AE7ED227C63DF48140268989593261C1CEBA374759FD301E5CC6D8808DB02219645555C249F0CE3E57426E646C38DF9A0C8FE5D85FFC068179EF7FFF88DCEDF94F1439160C6F90937AC536EF48F40FEB55D66E4CDCB26FEF053C0B5743698C54B7AC0524B54159D7D6B32EAEB4E546BBA81B7FB30FF2C755105D30BD17F9FE9BFA35862ECE5168E82C281C2EC1A465D948215EDBBFB320CB462A89E7915C42648E25340D9BC7FCB0D9B335B8054AFFF8CA0C4854304D8CE352BC505C42A0286E2E2B55D053FABCAC73073AF421E0AD3668FD456B4C293E021B7A89946F1FECBD801119C84786F13EF92FBF796DF853678F99A4F1AC1DE51E66D0B99EF25A57BAFD32805EE964D6F2A23BE5541C3EBA7E8FAFD3CC2F0EA41624D6D47AB83D1DFB29D64E41F6A329E721CD9BAC339936BCBA28EF7DE24EC4E1468F4DEE04B0FEE95DB11AC61EBC6B2C808DE8B2973668EB677734ACB96F096CE639B6F6FC364147FBA765043B25078304768B322E9F673A1F022DD586149CB3BF9AF051DB42F448F9EB402257E2284308C0322ECD6A1624AFBEDA99B058318AF76A1B19BEB11CC679E7A7505B29CD4EB6062F488BAC4BF1E775ACB48E7EDE46E3C1F4B61B9EDD27303881510D2BD1FC39CE4B93CD601EEA5BB4DAA0ECEB6A7E84287099074F285C2CDFEDF670A43334EF36D950CB394FFBA0E07D743688F5A0290A44B17F4B84B0F2E86C0D6A7580868668C324A9BB6AE752CEA16E9C3E6470CC4BD280516708E2D0C3DA15C9BDA6CFACDEEC8D01E134E7FC7197142D4B137AC90F3A4BA3D19EF6D837C9614FD246430552BA8A98F4CA3B404E2433AF3C33C7939EFA255CCD4F3BA616AD0898774A1B8FDD505438590DD61FAF2AC585DB7A4E51AE1EC2CAD3E831BA95B3C6116D7BDCB18E707415B3C1A1A376BCE58B165CC821FCFEEABCDDABE01110700302EAC0BBCCE714536AF9129283AB2BA4C74F0DAA04A33FC349D910E4D8387387274B529EF9AAA373EE67A85DAFA2211D08D59A5CA32EA3AF2933C6F2E9F2EA7D832B7B743CD3D5589A75FAC785D869500C9AB3CA47F718DA6A742562E3827368FD6A8CE0F0AF6D1675C095284C25D4CD358B3E8406F7616A1D644BC6BD3E77EB173751E17C8B23C45B497180578FDE5E34E46911B55B42FEFA3DA20CC2B75BCDD3E4CD311D3AE75542485C3014477820B231DD87A1423EEC9915E993CAF74D3B91281A49FCC16B76061BB16F6DF5418E3343B6530A8758D05AACA3C54020F5A49EDFCAECCA4EFA955E7B7D308762208D53FE727519DE85CFAFBA47EA07BA2C926713EFD9F254DC19575C0860128C9A688EB338EBA966007F815FC4AA4A345440D64EADE8569D855238F2716828CB9C8413E18F5F6C8D850D58E73F51AB91998A330EC71CA60A63BF6FBA045D428E697452518D3597C21A3977E604D60316D6A246326FFC24F5ECC9444A69FAFFB8D3E75EF7C5FFA90EE037F03F668F730AEB45230B30CB74CB09F2C3AEB76B8F4D63016D21DB889F7354EFCBD81F909122DFD24EDB44714C31B6CF470E2F11C78381F2F65B8C7DF34DEC83852B83A62E5AEF5B493B6A7FAF405CA95BD5152A1E0B5DBF724D96E80E3BC74DFEB11CFD1EBCF694C419C6DB87220D3BABCF6EAA0F8E8BB99F053B14831E5ABC9B5361B301C36A7DBB923E05FA51FD8A04C3B750582DC41E58C4CEAE95F46EC09627BF21AA193C9C0E2F4E73A49C1A6BE10FAB8FAB1B615B121CF48D7429AE790A56DA66C5A79948A4442ED82ED221A22EF52B830AE339A4DBBF816D0C6A33252BA70CBEA59F9C44C8FF9986D7568EF25958FD1D217F0A5D7C9AF8D3F66BD2D5FDB6944096519052F14845B5199B21886F11789F67B832B3CA1EC3641B6B700E8CC7C67BD7815EB1A4A17DB5E646508A6B576ED28DF6ADA6DF9912037DA07C47350D84D454272AED04B95AB2EB5BEAE11D96DC7ED3CC302A56FD561850C4631EAB192A077A3DF7C3554FDF12CC1BC23DF191B0878FED345810338B53419FC743A3C9674A835EB9861486CD5BE8F54379C722C279F8769DD8B980E29F4E4C3FB83C29D0770BF82ACCF2EADDFD77AF861E0A9246319AAFF83E8769A2830E2B554A7194170A8C346F911AF59AF97B36ECF70C4AF154F30BC47FACBB15FBB9D27830E991193C7F1AC509D998A9D72BDF77D218E078EAF5639D26025F83AD432BA594DA0C6EE52B2F2FD8C5E18395AEFC4AB431768234C4D20EFF9F9A60628D2B8B8F30E7A118B9EDF0BBE956BB954F6BE0C7F329471A2B9935B8220E6EDD244C7C98CCAF4C8940658904378DDCAF4509C8268F669F1EA336A280855B45C4262E0924F3B0B60566BBFE70065A8562DD14751063E875FF5C73839A0B85F864D97A47A76CF097BF7042B0A2A5E68280F229709B729FEA298762DAAB74E8E12CE68F8978C773165723D646485882B93183D51A49D9A192600B5B926E97ED63281E8F2E6402944E1ED32BBDE8DB01278E1F38487CAB931D3ACED0C7B7595E7A2FF421CBD785D21CFA638A9FBFEC1815018662F70D6709027D4F95EEA5D4342552932FC166C91723809554338E84FE01DF78F327A89EE650EE4AB0A14A61C81CE778CF8988FC5679638C37C18200FEA6091B99BC07528CD75564778717219317148B4835DF1008462AF713989D25C8F7A9E043A502253E0CFAB05D8B68F143A3C56259BEA76C97944CE823082F1B46518AEE38466806BDDF15793ACA06E4FD7BD48EB95E81BAE176F2BCB9E118239A88E069ED236EAB05A03A99225F8C6EE1F3D74284374EAC144FE3259C93B1B31C841C7D1DEAFD7248B6F34144AD8E3781F5CA5925826E7150D6831E94F586F878D814BEBA0FBCA0E930A2225F37D125A7EB418F3302A9445BE52316F4FD76347C77734B072B3B379ECDCC13F962CCC64BA308DA8DAFDFFEE13622E9054980E258C0CF3B886022DB6DB4635D3DFF1FA49EF23B62376B58D3174CDFE271E3DEBF70AE224EDAE3088D6F36D98C71D5228242F62306AE4DBC5323CD1FDC32F22BE37EBC99911734F8A30AB2605F379277CEE6ADB8395C54A889B1C4DF12834E7E5823D566136770321E1FFCBFCA3043E3109EB7AA953C793E8198621DDCA2FB14F1BFC67D24432A417472CB742188F768CB8574D036643D5D7DE251E77558390DD681BDD1876F42B03856B49F507567A72A4512FB3222E14801E7293B627BEB4D1742AC077DD3DB23003CEB9BF187C496F599A86C2F25475DE9246D98AD44058BC6C839B18DC646A5FEB1D195368542E62C6CCC79BD3ECEFBAF8905C1CA2AF8D7D220CD2F2AA8C6074ADD33DF1077DDF07C1A5CAECD8705395900D061C0A3559278D861F10D3EB6E237B1A8AB87BC9DA4B81DC2E27A4D0BA80A1130C8D3D94BFEF4771A235B76225BECEE4BD8B3CFD42A1228B537AF3EEC62FF27181259D0BB5ED0E7811C30A629DF6DF1047E53656CAA22427A35011703AA5515B33DA3F07160F4374FE6B522174692F9DC1A14AE773E0EC09361061D8D0151063A86A70A313916EFD48496C25652F00ED99D1CCC2351142890D1DD7FA6A89828952CA2DFFBD47B88922A308173F8CD91C03EE06F5C5D5D29F69E17EB7EAB283584614A95E962C6F1E46BE28E92C0E0567B361B44E1CD9AB25FBEEF4095847EE0F094FCB1D53FF859045E9A54F8D151598183287FF7262C398F421E96729D624E247A6AD723F3F12550E01AA85D2CA5A93F6B9A200D05B70753B0DA46FC9C58B408AE81E00E166CEE107A6376424FD6CE7A1D2204F6167F01E3CDD7EE6B3A00D3831072138CD1E989D6D659FC8BE41A572487D8CF635DDE257224D6407C45095DD550F6C8ED80FF160C62C0A4B46F1A717FA1967EB1D72CB4A784059218E3F96CA5892EA7A091881869B77F4448D4DD281637EA5B5BAD793226E11F285DE9383A934BD3A4CF9E8918BD1C9AC27832FCEF96CCA30EB0ADD05334CAAD8C7B7ED58D2E56D2DCA8C8190404433D622481A084A2FAD647AFA7552B1D10E49496A1310F7786E4BA82E888F8988CBEA1A9F752CB3F0E891C4C1978FFC8110981A9FFB2CE0929D4FC8F545C4AEF54EB2EF37FFB0F01B497D881D0732762287A928708132398334A74C61E60B3D5848D0128C374A4D63E9DF9CA90C99EAEA8C76BBE7D82C6D348BF57A94AA6076F07C366E47AC74C781A1E57AE88283892AEC8C44818B25938AB2906E3CF266529EA2AB9A7787EF454CA5AF98C1D8946E63228E7D855DB06A03FE049B8957E30E5DC24D66FBB73CDC04EDD1938072D6B91E1BB1D65BFE6168A91D8D1EE79E4250700B0AABEC5C251F22C6D52B9F4A3338FB0A3F352BCF51D2ABB9A0E459E60FD2E4452575FEDA3289FC00B70CE4D2FC9BB8A11402645C9EEC2D996398B1537FA74685B879092835EF138C6769A0DD6545412024880D60E8351F3E3067F57BE50BAF362CDD4066BF04DFF14A6616C6069BF4BDF3A2F043D6B32E881693B6E13EC38B27C249C9DDA8F0561ABA5352265BF2B32E1BBDF9238F4F2B6158D53233A60AC2AC0D56ACC08BF1B0E581B8002845087409CA1E6C42424263ADEC907064E1180FA4763B62EA4712F8B1622C0BE588095545418CC0B89E91D4BAFCD4BE5CD32EC8A3B7DC6BF97FEE78A19102065C4B2B8301563449F15A9C4032692F43B208385C4F601CB7B61B87318435C4B8339BD36152F3EEF41EAEB6741D434F7FD92DFB38715683C7BBC526B79AED7A4BE8E751C3DC95CBCB79D8D659EE5277F84194DAF52C4F37DDAD6D56440548CBE20385272F9ECDEFFE7F99519D9290C06A14B524E65657419431C6E1E0954BDFB4B32CE0785FC2C5A5DCB5A60488AD2C32AAA7F474C04D24B6EFC6EBD5E8F020E161787A29F5AE7A82DE775DBE958A88D360ABA2EC1266C337A12A13E01AA1C494FB6A607D9F5DCD679A2AF14147BE1ECF1FA2C48BA4AA989D1DEFA6D130C1234632E5EFF891B12C1AEEA1CD9085143A27C292BE098E723B40D4DAEA964823E710563293D5E82026C699B05BEAB30B78449825E3EC28F1362BEEF26BCEF791017D5E7D69C9183424668FB01D458555EB216229245409A7309093006567D0467A3A56557FEB330A7DB168FFDB1E58580EEB7411531678EF5E08751633F8DF74079CA53097B634D4D06EAD7EE17546B085753A72F1586C734F1EC605DABE22C078DAA6E5816CDE57B843351148FD3FABB240DC87910006B2FDD94BE5987D4FC1F16A8630075CA86DC35B792355DE74CB15E5B6AEC69C94813949FF918EA51584F4F1B0315ECB9785C7801B1FE6980F48811D26E9A5B148875D3E09286E81E30B3C9DF7ED3589E21E7E7E41F8ECD4BC8C1BD4545ED680C7BF55BF898E43528EC966EE22CC4D66B24F73EBA4A2FC36C8B531DDFFD731B4FBFAF5DEB2E84790C2277140E3199E19684244B16096E589A516DA498543F58BA75AA0FA3B24C6C1F6030092ED8510514AB52DEE965262CF95B6667C2D3381726FD93B96176F0F9AB72C7B5E9AA5C8F0A378EA0903D7D309B8CFA768565EAA174EC07A50A3BC7F5288E7F78F8B6FFCC2F2F1E1176D290ED13D50FEA90C1D9A75A53071A93E44926F3E6DF3D3B5C15C1AEE9BA6E0BCD33404AC5C3E59A9EF3E616A9C7B9552000664B46ADDDCA8DA0D29DB82C42C1C60A72A08C961CC3EF74C883A4D7516593112C4EA80725A19DF2F0EDBC8DF2A31E3FD5593A20AAAF979CEFE86DD3E5561D9AAFA33C2E6B27E58F7DB9C24230BFB7015973BA5D5FA1E6144BE5FBC94F5E13FD5B2D239E0C60DB05518245EFE2944A02C583DC67C22FBBB56B8D6AF359E686F0C678763414A79B8317A22D43464EE11102E86AAC9EAE83C155F634B59EFDAB8B5C8E5AFC37BA72430E5B9F93B6E97E456F24A2D580A93B8C7C4297E76618A2CA5F1EE026245FC0C0CE659D0E948343EAF38EBDD28D1B5A94EB58A075AC65123B2915935930FEE6D7F31D275732D4CC73A71AC7C03E5F1AF136BECF98C6650B85B8A259454D15AA6BBE7A194BB8A6C2EFB490F81A937B40A8AC13D3C0BF59B4A7DAA946004277A} err="Tx already exists in cache"
    I[06-18|12:57:45.413] Could not check tx                           module=mempool tx=Tx{9D9DA6401D8CCEDB4E9D0B0BE0C9F900C8D49CA2F0FF369ABDFF830D866F756C5139C13AAB8EA039F6CF37268A017B18E68F63D51356E8DC4C29A94734F69A1D5FB23965721F5F05033344D7B63262BCA5F66710776DCC2C6BE25685B4A5A52CF290344A5A04FA80304AFA3C05868E5A3A6552264350AD41F00A7155BB3965E5E8FB8290EC4D66A00EB9A30A602975E7CD8D16D384D991ACC54B9DB3830344B3555BCC83D68757397FE976F17234FBDCFBC204A8AA6D099267A5437848968AAFFECA597A6B79BEB13D028243299DF7EF5412CA7B094306E0684EA239CC83BC6EDF5CED5C20762F8A512D8E03393C4F03DE2E693F593A88CCEEE10E4FD32820D1A52B4FF8103E92E39C2EB5CA99E1DC0B902B767037479A1031DEBEF0A889C34A353D7A4B796EBDE9514AA3890379970CD8051F60A26864810073B19F973E908F233593B83D82DFDE797BBF30783EA80E1600CB2D7E31545F3DA0941A707040D03CD712DA6262D75D6EFAB3B7BB0263FD1FCC5AA314E19DF15CA4BF250BE546BDFD59CEC09386DE4B601311D2D17F529ABA855318900B98CAE8BA9C55BE1BFC541989C78A9CA526DCD34C04DC87BDCA51267D7E2082D2B35FFF2A1CDCE879A21AF6B7EE95F1F54CFA1FDE5D2FEC85B39493D1C7115EAD1376D1A50A136A8713B43084400D28FEC46AEF755E1ED2E97C80A4DB655CFCC1024324F5641E293B28141568E9317AF59CF2C250074751D56F0AF367934718CDCE05D3F9028B8E572E48281D598D46B43DE26D9FE6CE45B4CC978DC166E4D39AC64E4AFA333F05D7FCB69FCE6F2C8F340871983D9A5CCB266AE8728C8FEF300F5F1D0C41266C81687920E51B2F1F79A2F2713CB88251C8C5C57D167005EA98BEC07D2E0B3470F7FBA0F418EB98BBCFFC860B2BA460DB62F7B834E391F1E757164054D9C66FC3DE5E65A98C0BA68D8045E5478844D6F284D3439CB5DF5C741C158293CBA10919B5E8F18E46A87E711E42AB834B8107415F1820B05C2A6D6F7D934F30D76768D97D372942818A5E105DCCE3FCBE2DD233E42E0E021E103BFC711C59C460B10FFA3BFC6D452D2CCFDB9AB25F05029F583D4A3F0E0932B78A6AD4556DF7E261AD0178D708786B9A21AE52281AA68B92D8588E55F7414558F187E6F8E3746A76E8B7C145BD1C1228526AA6C68AD3A0640874EE951E09F99831EBCC5A3F691824CB99279C5FE02DF0BF50DE1C07ADDC9674496D81009962B6D89B0E854642A446E2ACBF147ED97B286241E2D095A3B0A6978D534A1E66877F66EF17DE19B2D71E6CB422EB6ECAEE4365CFC34FD5CEDE33A60DAA388124E71F8A94B96104C40D61301DEF8855072CE559DD300ED828FF764984C21E961FF1B93D8CA6690B28BA93DB2D45C2F04111A15F74015918E4FF07C275ADDD52318AD1CA3FF8057FB8E2BDF72A492244252B91F5ABB0B5E5909CF42C5AC4F9D7918B8601FAA9E50CA39E65DC26A6476E1B3DB65AC3DBD2ED51EA26E5B9203F00ED419F2CC91CCF178D9EDE2F2708513ED0BD2AA800C408C3F1D11B3BA5217690A7EC628C3693A85581A2E8D322A0595A0355250F85D16982458DE9FC1DEB27F9014044624FB610F672009E571CA305090565CBE4080C63FBEA2E96889EE472DCD2E65BD7321287D3A822B24846CB1EF0C87FD3655DA3ECFA1A16BE62E738EFC9E7FCB247B7972471710400FEAFD4405AD2EAF75BA5694A9CFA7D8A8BA155A3E2B6915DBCC01AE4C616BA68B5720096D55D21390F71545CC190F0F70B316F0857F02A659E91D17A1E27E8011FB894A33D1451F02C4DFD7E1447CE6C7548FD1EF1AA4083ECB5DAC082CE4894AF3C59268243DEB18EDF23FC35A8CA9F4D6B3A931C5BC0AB7D28B4A9832A286A54211CFFBC11DEFF0A60280BF7DE6CCEA092A5F11E8089671AF9C3CC5038E96D62F92E2F695F9CCCB9169261C4549043349481EB71F7F1FE7609D07D6C3B8198DA02E4E4CC1517CD568C8B53A2AFE52D13C256AB71324174586E87757941FAAF5D601898E86E809BAB4462845C5A6EC66F756E39D11E344E6EA1F809E5B5F15569FDA6367D5CC0A92B2E0827CBB305C712DD59F0866E7C32ABF717F76FCE1866B87EF060FB93EF032C6D94CE4FFCD330D374690123103D5026BF3CB7D7F7B4A4E0415BB66DEDDEE260CCC0CEEB1ADA62D0003709C214909ACFFEA46B22501FBD87F8D031B0B38E0E8BE7692C925D6B8068C41CB40DF502D38011EE544FAA4790C9DC3B96863CB7107F18121E976AB02725F2B972FD221264353D9EDB6D8D2DD3A9D510EB639F4237F049621C5FB3237818FF703E491AB60B73F69D285D1F68FDAA23C108F5A9CF66A916A182AFDA15696499E86DC0ADD7552DB7B74DB6F19F87E4564935C04130BD1D073FBF42AB2870E67E8C99F623D0E6AD2F1BFEA235127A3261A4D06B3AEC037B524E14826DD57741560D90F8D1F3954B1FDFD6A2F1124B589054117E48BDF2A74303E886A5E825C0F9DC5AFB460458FA517A378172850D311DDED0A7201242D84539A5C584FE71C958B15237C8BCF9FD1648AAFD5663EF46C64B68EC038E8DA0A7ED2B04A50E8CE131074461D047AA49040ADDE8433B086C9DA89C38F18706B456C3D17DF4DD12716C9DA37382C65556016329B884AF772EC9869B3A7588F6B53180F25615889ACCC6F6D2B983CECF79635CADD19AF3D3417C7A078D99CF11C9108D10C2D4FE8236E2DA744F7DE8CD085DE0F3120452E837CE9E1487C4D099C6507B8578C8841ED573D3D185990FB2CD1F412D544FA9C322720EB54373B04F478079C268932F28D786B14CE1AD35259EDAB1F7E9EBEA16FA806CD5B197CA36E8C8E020BCCC6D8A404906E7A066BE811929CAB767FF9BE3DDAE5DA9BF0C2E2775D2A84296067D7519D2ABD501B5020EDAA3078124F3547A904B0A08F3021D30E328F00230FCF2C5F9AC3925B1F5CF06A3FE488E445945C9C15FA0D800808ECA44A17AF62F8134BB2ABC916E1DC1E6795589524A493FADFA0512D08E350CADDB21D52C7C6266FEFDD82F559B9A1B7AF0B5F74DE869026463913F50B7C0705687DD8E905D332AE1F610E66CBA89C7B4E94C0B448C364052C113DE579435FA9ED213ED54FF8AF5C0747F8482E4F6CF3125EC19A803488CF5C94C4D25CAD20A4B161916CB21F11752A3300285305FFE82BDA272CE0DFE29E0083438791B63E8574105906B3117F0A451C72429B890D2AA122A526C348E27360ECE061936C99971EBF4B44D272CF09488E6A965ACD6BFA484156F2034E5DD33ED082B4E8F88587B376A46B0F99B375771C772F479E3E6DBFD4E25E9F41C07A30A3AC46550DD920D86F7D5779C1C0EF38B350DD6FD2A40B04DAAEFAC128953693B172E2F5335BBF1F79D94A6912A66C6356B62CCC99E2EF852992DB0F59BA3FA324511812E1C2AA5C0891DE809576FFD7F8829DF78FEBE7BF64A2A227B26D3DF41D574B552EC27DC4816FC0C95092B1E569EF8D9132E6C76F5BEF9922DB45037644C212836D7CBFD204400846297E87FF48774CA85441D1A7C9807740D069232A00D5FBA9116BEA2C30AF0E411D287CCAE0C2D852044360B90B922A1E9EDD497B441BB51AD58131B2830C769137063850604282031AF00E14AF167D3470C823F17960756BCB967E92490827098F0CE7D1176FB78A46A65AAE446AD2CDD32F597436D3A364ADC1743A2FD66FA13DD255C30F29BAABBA0ED668EABF6B0966D6522595A2EE2B6F2F6949C27CF2E4B8A841E1596B19BD095448A1C1D0CC631F424F50902814FC3CB28FAF62BCFD7F5BA6492197F5B722AA1007E818380BB6486773AD9BAFAF72D34D7C91DC267E2EEC582DDE59FC618E2BB4D1F18D3573F97F4CBADA986F9575F3F5206792796E2F421A2F46634E2BFD657303DBE3D02E52AD73B229C3F536F2649CBEDAE37498CFA780225154EC958B2707B1EBF7C91A753B6D2FD3D12044585C2426CB65A273B07A5988F8A322E1BFE0841FA8D7DE461802444B8079FC7628D1B71A5B9321C6DA73869A5698631034785787C50FB0451538D66612B5D6C534C5C6B70C833D843ED74B4AE937E944F5297D24739CF199E2ABBFE19B3184A29C83E84D65A8FC70501CFFD48AF91220362AB366FB20120CE38552696EFA5C5F90BDC7297A31D899C41675BE1FE638465890932FC57E6134D2DD8DDA23624355D443E18A5B22E9917F513E43D87E76A80111DB56BC2CC52ED6CCB2899F169C9F2EB6955A7676DB72789E184F385EA26A4ED93D72C2110C561DA3469EFFB735AD807B04377343E8AA2632A01F0378E4EE43F480025A58FCFC02E8D8DA851F21535745BC9A4AF43250343A862F2EF5F0796ED25BA2DBBD92209E2B60ADE0D4C18B2400BF5F1F6F263E82E21A90D7D0EE9D7437EB39216943D99A3B9893FB9B4E9FC1C4CC2D4E1617C93F8911B2AE1F53105AC7BE1948BEADEB66244A78DE82CB244D542EAF803B9C96A4BF8368357FB334370A785E7B90EB508E737211C2B88B8C0DE792BBB7FF390784D1ED929AB7375F88FB3DF3587124B1AF9BB545649D26928F42304B1A8D66DE9CF09F07EDD0DFF50A4FAA99A69A798DE1AA1FD3AD3ADB739C265321F764B29920FF1A8BB1CFCB4B9D4671B26828C9D26D010BED9FE851536A4786E81C583F56605D7D36B0AD56668DBB80D5F87B5212C77CE13D9D6ADBD6270B8BA046D956F024731F3EE51E776D2194C13BC7F740A0BB18A06F2B8C6308754EE550C1E755122773939F78EF99633BDECBB2B4C30B4435A0B097324081372C26AD4B0177B722946CC860F84B01D0AF34E048C02726739132A3DBDD842A4746CC02439A9DB8F9E02F85910A115E59B2D2EF03318534FB458EB88C743B910E251324DA784BD59A9B99C7CAAD9F7776C783F9B6A5C964E612C30B1994027C296DB267F2CE1D76C9AE7BF2DE1CB2091C8DC69A1ECC2F5AF514DC4FCD12593A96D0832B6AE6DC23363B875728D3698943FD6F69A6CFE6EF57600CBB82124C233C7A988784913612619D88135D8BF6FB824D7AC8D0CEB98F92969CC55CEF4693B0AB0EE76CB87158176D311DFC40BD1070DDD05A0E6C84B2DA771E5BA33D879D51F8772BA37B0A0585A083318A32248485715F40F874626FB8F43DCDA3CE41445F48287C643D3DDE24626E67F9D27840EA091E66A6E5BB94165501B8DECA217BEF85B5196D99BC1E7DF3EF2312D5F08FD4B0C004992F2646413EAD42AD70043DEA1BB32A499EB46917166D921A485873CFFBCB159D9642FAA636BD176A88B66EEE9D8F03A567D333C69E49076A575E3BA283D2C64A2C3218186F0A9E49D00240ECD24FE279557DE7EDAF3DE45A71E0BA3757C58FA3CF3F2C3909F716A062B2666CD06BE86110F6256F913804877CB30CD58C54A016C950B4FF9800FA6C912E55D70A9D3C43AD9E44DA1E87562B3B8129C89D161DEEBC32C091DE8CA45E17A519BBDD6CD2FB06EE07ED0AA21254FFB4FD984EE830CE69A4303BD6BCC51DAAF0144C2E4C154CDBD937C28290CC314B703A806322C197D93337A7C6E952A57A6B99010B2A73A196D08986F587D471CA5209294BE398D44AEA1546437B0CE8D6968453DB28808D32D566D0F74454658EA460AF417B311C46D0A2E5E9A1A40C5D9F408610AD4F86FDE0D5697AE59A20A3E0E79B187EF34FBA0AC1FBD302DB0DDBA73E999BD6993127DF62F3872267C4B60FE119B91D890D8FD123FB421016FC812A19288E92E0818EA85E24831B9D286E0AF39457835B7C08B4639DB7A967909D8B6DDD1123D2C8F7ABF30C3C623E5FB33CF3B86D132350CDEF388AE183DE83CF0FA6A9E81FE0BB95A62B0C566BBEB3D1CFC6CF82A9833891E0D850E1F026D8E7E9EE61CAEC93C8EC09132111F1553B45DBF997CBE5DB5F6E7B2ECBE0124884082C873FCBCCD1838EE60858DE7E13C1CC610D1B436943A89F06DA4E71CCF1628C5E579F40B62D89504ED38C4420CAD0483272E8883D0996B84031094DDA4662F1A98B93CCE0A0CB8A5EEFD626EB97350C88E42A2BE8D3637D06ED3377ACF06D4EBDE1F12B9C4526767ED46BC231097B8C6B826F11F37577FFBC8CC223BA425A71A534736C069489F157F1046E8E6B947F289042A02CC4147132AC80F531668CF2B90F86EE240900CC53C181AEEBBBEDC98962442F74FF288C4CCC599477CCE85C7244404060B9092B55755788498B0ACC80C24F5EC78B2AEE6FEA9C0E969689787A40143E51EE8C704F8384018C2CDBE8684FE43614D961BD6A8D569DEA04FE615B598FD0A66F57630CF177AC45A6A6E553004EDA6A4E5A29E7575DCB659A0E89A30FA08DF4CB21D698821CE725343EA0A28AAFC39BBC60CF6E54C449967EB267CB798BCC2F71B6FB400760C8C51C4B8F7C75F3B244D129606D8613379F8ECBF6A4B01773D4FD9D4DF703BA6386AB52E5D5E39B871E81571094E341BE0F328E4C1CD6D1939B541E442F3133131D5BFF933A14D47B5692D41B17D1DD5453A6C5A357B4C884E7509F0510FF4E81EF93A9742A618FF9CD4889F6472081EF94618FBCFBE402D2242CA79003527298C73BDDC835714BB96FA279748CCF51598F68C3542F69276D05156B6F35142F564FEFF71DD9DFB9A84A1112B1B66A3BF1874FA8980015E526AEB441385EADF740755BA5026BCDA7F811C10CEDDEB3F84618E630DB2B70AB881776FAD9460446FE47A444A7D942491B588C9E94FAC49AF71F89EEB6E9BD220C66526D62B5274D4AF05F181EFD181BC3A20DE59392F97F11936B4E04E681408B179BD97EF39DA36214D47EE6E30F42F1155D3EF845A0FDE443707BDC7533E704250AF2963BB534B44A27EDC185D35DC23A6F6EF2A30C66ECFE363EA5B1BF35ECD30007BFA44626C59F0DD6BCC28EEFC5C600F91EB6E0A7EF11921DE183AD85BD47AB8B0FCF145184669ED0E11078088CABDAA84D99F6F4D36E140A865DF2CF5F542479E36D6FC71951FBA0D4D13A0C1D2140A66B45A07FF04D4A9692181E23BE9F05D4F7D1D7CBD08B0C5044C16F0A878093F4D13CBCB1DB90154D7112371448AF05D8300A9FBE6B75C9E6215461786B0F2CD415FC0B4134BCB89BCA1AD0AA8F6C7C12D6D14D8FBC13B86EB12BA9966C4E542BF9DD20FB1887C2B75EFED2105BA2403F2DF4C62AD8D5B023787CDD296C81982380B667BABDDA33A742B19737B0AB25FADA723EFD399FEA43054EA032A2095408F85975319AC6AD0BF46EDDC3115CA86EED7869CE6DD50E89811765E791157FE9FC65B77F83470086EF1C862CE5A54AA76AB498D85BA38798173DB4C9E6A6F0FB36E5B0BA610E95730E954A1001C63A5BCB6A6CFF37925E4D300EA03F835B6BD0CDF55476A37053FC79798D8F9D561EB6BEAE5BD9460FD2FC9190693AA7E15515FE4146AEA99DE408701946FECCEE6BAE265D06B744D8D95744EE33E1C2597D854313BA7B2497294DB03B97E95B2799FB219DC9EC0EA1B2C3705C3EF78C3A8E208A97741B431660FC1E3DD7FAE3EE1A5243A39E24A6E0216497171E12EA247EF8C79E70AC35E9D61492C83BB7BFFC9C6B1812B8309EA6C7236D97A9070BC064B6306B13416D8DCD619DD866C3F1CD8F3874359A5972CA41B5E2D5315B6D4202E08A321AECC07037AECE89EDCC43376E30B4EFA29B131830375EE69BB3C99086F661DD85262B393A30E0435EDD848F32F519D10D8BB22FAD1016464A77FD828D45E18C6CE3E849AB3E2C27D99CABEC19EA6DD140F39E7C043E022F8CCC4C5C6144436126E282026F55C08E5FFF165E96C07BEC05057459BA9BFE31F4A914D38E562132506CBD1DD6F88C4296A2598FE4DA712E1196292D0D2A3A9A47A327AE0FE74106BC439C173BA0103C39C446530636DC759D54DF3B89F643835BC35E8A3F02BED94F664BCF5B67A49686FAFCF3FD073A2C52F2D2D82732DDB85E8EE4AC7A8AA3261CFA68F3E803946D751CA1872BC88D65BB5BD058EBEFE7A3200F4006A150C6E38C23AEE09B697CE30E97F1DD07DAF65056FDB330CE52A055D5EA2B80EEDDC3A264FC0EA6CC3812D8763BCC244659E53CC2609E0B1D7D92142129724E4AC9B1DF9FFBDFFB4B1FAC17778F0716C2240A80E17EDB4B0CE873A3EA936C0BF1E3D2E93E618A8EF9797EDE94E92A527FE34421F0BD17F4FB983D0FCC827A4FC44AC92B5239F879CBD01534DA99A85423B4B793E632461C61E7123CC76D46AB05E44C9D0DC80234C157764F1CA0694C3C40D911401F78C405FC9274FCEED24E8D255C3A38ED02A2DCA494250825769B3F135FB17DD809B257E55CD0737E55DDF35A5CFB3D9084FCA395EE966A511816F8E316A89E89A690CE1B79573DD72306347EB54E7BC82AC7AD9AFB174163E16DA8BA3B3EFEA4389F9B8E17AB451116BD3BD555CCDB100C34635C91CBC18EC0FF9ACE2823D3D1E42CB1D9B2500B37FC473ED03EC5B4526FE436C4FF41E56AAFDD54B7ADB0AA0EF21F53D00744FBC4120FFDF89312F97FBCDA84C76B8AF770F24B1D6A86B8CED211DED660150085C1DE3AE3C717C93A06C4F1B78885E929C3499D9F6DEAE3213433FEC14E0D59B3D9F572875B708E443C984FCC6625FC64B3471BC6A45E01A9286EBE4AAB7CA52D1952202084B9908EC461EB277F515B4B6B3FAFC7C36BDBBC041ADD0EDEF62C2EB93C7D34D93E21BF37CD23095C86D9743540BA8AAC017782B6E98B7E0C958A30B703D0132E6C4841EE546496674E12160425CD47A263901BD2A3A1329D95205B2C792B46C12570C3E638879A527C9ED8DA8F641C25E14B3CA38196FB5859A18FE77A2B74FD6C0BA62B91345B722F99C7339B0CA8D924854BC7FC668FA8A2208EB24D81FFC69E58431106E55133BB0BC7EA9B7B5B6A3F3E3C9887D71BC78DD9D23B404FEE2F1DD148D744DE59A5CD6C84B313140B4A1545F350155F3063164AB5CD24284C70D443731555138A5028BE89A0FE3EC95543EA9793CFFBBA36EEC708C6EEB53154C4CB7E1074B2121BE033E1104F26C32B759FD22B01ACF1F3A8F7C223A9AE541B4B0B37D4216D948B7BAE367D4AD337F773899687712022D74DFBB982F423D1C3C6BB69FA201A80B27EDF0F2C96D07B57837852ACF8E03FA52D0B95306525C625140197228C7237FDA691F9C317D215E5031A7A99975B0ECD9EB42CDC0E823B055198106B7140460B2AFEC85DB17AFAACA00892BDD7AD80466D9E9711F1A99DF1B2F7ACE98A4CFE8255C508D9E76C57065D37CBE4441D40F2834266F2A43BD3E6D047FCAF6E5E30ABDE961C9D3EB1A0DD34B097E9C0A8FBFA3B107EDAD6E6C938630F4A36335996497BE87F9D60F17F27A74C70A58F8E5A92E98B7D3B6C9F3C198F9E22D51A58525E58A098C88FD0B13F6811C640EDC7E2F7685424A1928520F48BF7CB79A5620706CF71F88D09EAA81956579F5F797784BF9846491EE9854642D35B132F96047AE07A4DB2F15090484D92F0A74720F97578C7651BA0E0B01AB546D61708F4B6ABC22767D9FC6E9A921FA42FF1C81A7CCE2D6C4B3FE9901015CBFB2F99A5F155BC53F371A09D202C0A66255DAFF4A5743D2D26B5B2C7258FE95E1337CA7D1CD07277583A36C30B710E42F44694397484727514F57ACC11824A5247D46AC33BD9EBEEB07B0D559A77603B4B558BF5708B5EE76E1722A705D35B563C31BEC331DDF8862119D39C95D2DA0F88B88D71B47CD10381952C7AF47EC8470FE3DEB66619899A96AE309810BDB7235278C41992990F2E3B8A50C710393558FD39F13C50F9A0B268BB96F885465495A7800402D29021C97E43190ECDB08FEF94F79442B2996B054155DEF652CE3328AE3A1EA5384FC60C708A14F1D60A5FC5B73C928D821B8F63FA59DE2A7C23DC09BF24B4D2E3F6B5CBC105D544297AB9F548A8E57F169F2AF0AEF82D35D7F52FA98D74C8305B41A6810EDE81B5E453FE0FA58BF0FFD854425692D28419E0FA83640BFB677C0B3769D336A7496B83F0E5856154FD969B77B2627E026C20382084484F3989E6F36DDD5EA56A44A5CD11FCEE331C67305353095A2DA2AC9287392800CCE4ACEC39B6613CBFAC852982F7C3313F8394286F300404AA289892F4A134BB37A325B937B4535C1DCFC7481FE9D8CCAF2ACD302FE4FC1251DF79A3C85BCE9078AB1BB5906205D8ED9E58C6CE5DF30E128223E775E017B4E90B104FA158670CA532145B3F504F5448A12DB753358FDA427EDC14496FEB671EEBE4914CECF6974290906E20CDED7CBFA2D93FB93D49454DD0892ADA6806A517615E9BDDB1304AE58F85C4E2982B85FB0832F22D3E78AA6437FAD5BA9621843A1C9852956BC4FD8FDADAEFFE2C8850F008EA54FB23B6443DA2B6DDAF8FED4B0619B9411DA6DA884A6788926BD41343FB58894B0CC98AA46F162C81AE9587C97B17CFD333659BDF8C3F79692E67008270842ECB28B56EFC1C3475AEF0F95C10871EB98D02766CCB0EDA8F83C8AB33651E4A357892B257B3862DBE0911D02DDAA9438D22D27498CDBF3EA0EBCAF2D701F7FAFEBABCF6396246D0E461D45344436A416011244D6F1D9C16035D0AB63BE423EE53855A774C9719F5F421135F505F988093E4E122375C310DEB2DC2061E144EE52E20522C1300029D14FD49F0A1A56AC918E31A649BBE3E947F6658F8F3E0049C24AFE33600426D93EF32C54153342662C4710A1DE9137F9123D95769E5024CCC1BDC7AA90BF2B195F59C5E50A67C6BB836AC44D6CF9F3AF49EBBB041F73B6DF81B7AC9179E8CCB6F8E3B1E50B51816D679E2BCD8494FC364430C757B5D68C4CC0933BA6E254BA7E178BE3AA982524566908A6523D316D317C0ED24D0165D2023CF9C9DCD6EC19A749E5B3AA6690F31837059A70244B164F268094E5A05D88306BCCEBF46258020A30415D6158194B200B37EF740554F8AE7B3DEC2EEE7F02A86D51FD1DE2B90130EB7981CA593C16ECCED894D50A4ACA11DD9C5CCB5AA76696756A9EAB8A92972A2F17A469235658B0C89CF8AC11A277DC39208BFE8ADA318A208D32DA2C33B93E08D9AEE22506A643EE9E934640D59EEA6486C14E92EFB3C97A1E5FA355A74F5F9A066B2220ACAA5D371C5BBB31F1113141A26EB5F3118EF9A66290A247DDB67765B60A172236A12589B14F9E48625630F0CCA35F47A93B13641275097CE93F86D8CDA1F8FD89DC1015DEF0B8FACF29376C8397FEA75984ABEBF581A49DA8AD863DA5A6216A7342114566C3D7274BF87438A323A849190B89E2996BEF2FAFBB2C481477775526CD138FFDD0A6CD3E65DC10C54747DCA0C28A5550AE39546A946ED12AD462301309CFC94E269EAA8BC8D5C367A39C9BCE71DEFC3408DB5E9159DF890060582C0198E1DC1355FEA1F7ABC19FF8FECE2EEE34873FD9FE772E8C9FD9ACD523F1B320B040E66EF2DCF2A14C4B1E4AC38BB939FA33B1915756773EEE79FE350A939D0E9BF62E201641947D1E8BB7B47FB7C0520766041C9DC174BC43699EEE66A9DA8E36318985DF4F48EB48F906F165AEC4E372E7AA799F7FB2C98E77796E696DA51B72A0F188EE88386D2430ACB5CA14B315A8919E68F254E0A635066498AC3E6F44D7248EC5E8122D16C17E9146A8379206E7630CD96B99E19F90422725AC8B113EFCCD6333F617B1C6624B826E1FFD07F9C4E9DB1BA6DC8AFF6B300B73484A03F410295E9B4432B682FD453BCFF0649E86A6F14C4B839ABF8A8784A7074500956054DF81EE85E8882ABD6A5E0F0099E7B84893259CA3FFE168184F0518CA5B75F09FA4645C6D3A28AA81D4F430DB8DE38F3B862ADBEFBDC66B48765B22E45B003CD97544AE363D52425A5F68462F33492661C8DB5712F19EFDB300F00303091B6F802758FD1CC8D7E6111B1FCF4C3495567394AFE2FA128A97E92FE8FC7BBD9D4E26443354E13009CE9E8D2240AB48007E7DA845525B00C287F06A11C305FE8EE8F03A572C4A184E35B2C57CA06414BFBC5DDC4C382C0D93FAC0F8EC1B3BE2B0A219DE4B029F463A0F2E3D35ACB6982DDD4708150C272992ADC48A88751F0D23896D31D96B2F98B1C7AA8B17A48334C8DD433B07164D14C3705F97ED9C94351B75CE883C35CAF9EC8AEFE8ADCBD13414F4AE417ED460A3A09D65843100E33EF6E1B3F6720B457572847D7F199A4AF5D9C0B57BB967681439F89EA170E138E1230DA40AF322FA4D525B068FB2CDBD905258DD03E4CF2F73D00246F33D7F23E2AE4BBFDF6F1B452D3BC9F15E9AE59B212BB37E256A6DC50DBBA890CC517E18DD6356367B7F1A085F378AD800A9FF7A927F1743231741FCF861491E3A81CFEF9BD8ABCF7A3EB8271E250B0AE360BC96FE2E0BAB4DB5DEECA4A3988B3C48E464FFD50D62134BE20DF13B2D0A33D2954BA22B6B8B692AE27181027EE1D270439877E68D5F5FB14A2616312D0E1098099C5BA8558A664AFCA8B2531823D5A0768E0C0B9345FDA2516300CD3C818D5911AFBA45AFA465DA5976D5DF4FC59ED8D8AFF6D8C02CFE139AB9E303A6818578A84FA2A02DA80F7E3C01D427ED2E892C0547C781AE3C2497A2A251E35E613BD8886978E4FBBA3B891A34CABFFE3D364384052188EA347113CD9AE5E6CD28CEE5DB8FE64240D1E5EF7F3FFAF174C1AA62DE7F0023DEE4042D39A301861E117B4C58782A73033A75CE3715D11B3E00391667AC9491C1B34B7BB6C19A0CEE09B0FF277EF69A3D135344FBEDFAF6DA313BB7EE68A7E1F81A7DE6DC7F15114935EE84FD1EE24216D1D09AFFC2874056029E6205F395EADE266AC60A693219EA697CA7F27C6A38B7BB5EF242D31F70C7123B25A272D97E3AFA9B9CA1900A406AB1E9FF25DC827F6C6C12F0632348710C780369D06D1F16584BC2835B091CEF9CCC5FF98F2AB5B52D557D2526FAB690323AFAEC7C4FF27108E271AEFC6E66FC9FACC53E3373D2881738D32C8262B80F1BD7FED19AEAF1FE921E338FF55B97BF41F7B1B99F6A3323CEAE60B345ABA20F44BE6786A0F09BF4006FE083C3F246F03E892D8DBAE488AF3BA251ECD4E75AC742D46C9ACB7BA47504DC541EFF58445F82F045B6E05C3C56A0D4C725946EE93468F361C7B186DE32257E6A641035F2DC00EE6F3CC57060567358417ADD5C1EBD3D65C1B36471B452CA0349A17238B3DE03FBB91BDF61311C27144FD82B0E466B036D063ED581309F2F2C04A24A9166B5B5C1CE52D69725777C459BDA51A9EDC21DBE5758325D953C524F8A77D376F4668A9EC7BE221B8E51B3FA3F2A2893B7556D0202BFB692866A67D5E217CF9EEA7CB025CFAEFA1CC78B91986D651CF83F8FDE54C213B810C1117EBDBC78B9C9285A0D9D9359C26BF8DCEA5461C46E4611691CC6E027D1AC632082174DFDF5369DE96880899E68FE65DB0EBCABF6B9B1A8F834DC1A7FB09CC7F6F68A7D51902A11B854FEFDBC8070508E442FC7F295B08A092B0F5E556BFEE86664D06A0C737005CB0A78F9EA737F652B4560FEB1C37E6735E44C52B134515F08A03433B427D49EC6F805F2F5D88DC0E179D7A212559A4F2C9F72B44DFFF9E5E2D21A15FD4CA7A234ECF04D57DB217BD49A70935AB147F81E22D88063E0BF74B15978DD5DF13E83FEDC37B6669E63CDA62FD912142C0D107D1DC4ED9E004FE83F6455A653E9737C6C230E3994B4A3BE3B5C18EE3E2136A379D3F435C987B93AA58651E5EE0922C03B7F5A3CD415D2658B5604F30F2F529007F11933F136F14B5C451DCA83E9ADB29DB53740A77B07BAAFDCC7B6B832B30C40A958C81C544F3A7D03FEEC9769793732B4737167ACFBF28A0462ACF122F2386590C71CCD21104B99A04E4D67D66F0D4F17100CC60A8D79A9C8298B40C068C5F267F6A5DF5BD362FB81FB9F9AD97C3B26AAC68DA2B1406841C843053558B6A66E096302961A1C0E4FB907EE08D7118D9DF77EB8A57FB89B71CA2BCE15863DDAEBE104A4CE0BD419F07806839E8BA31EE94AD8644AB9415322B732F1B7F0A73A71FCC24AB829C7BB640CA32BC3EF2CFA3A8FA6243E53486129E2FA777A825C64B66DF84E8AF5244BC4191BC4D96FA8C319566FB5438ADFEB93B7FC60A07D0EAAE80FF8BB0BC401890C07C016B386997530ECED4201293DBD371203E6821C2E196AE1863AF3D8D578A7FC770A0EA7842DA9CC8F7964BF3C24EEC7AF125622748EBC05} err="Tx already exists in cache"
    I[06-18|12:57:46.384] Could not check tx                           module=mempool tx=Tx{4992425C657957A98F93EE826D6E666F106A150819F0D45BE9BD5AE3DB743FC544E668356268AC4EB2E399FEDBBCE16B6EC8396AB504E6E89625E2444B93115687BF29971D8DD73E08898D6989E4BB7FEF037B181A0E53E85677E4A9EF4FCA7EA43E955FC501E6D1F79928C9A16F268BAF2F956F38677F6027A880BF855843B0E1C78BF92C6C55F3B5F95AFA929670FABFA928BEE28C49221BF3E5FF4E29AA3CBA45D7E5474E9481CF9E9AD99144CD24A30515AD52F66F14D807C7FC8ED951645D3B3A34B1E60B72A329CB70132C25A7D3C6568FA37D8858168994BA0FF841592CA75EA727A1558BE5CA11F955EB660A3DEBF1D856584C5325DB18909F7714CE3FB5CEF10D177E591E7ACF83D44007C1C145B3A3CE9F3A5864424F178DABF4E4DF416155E79F77DA287C3B8BD54FA38BB4A8D277D469D3F6CB5190BD3054D15B0C2CC4F1E1711E43B3395880DEF4F6A05EE0BF851371EDAD62A96D6A60BB13A3F8770E3A48527027C4653CA93B2A99897C7DA41D9D4DE817C704D785FBE06D248A41845C0FD6D9423174EA477A7C307CBE6F6478643DBD78AD99625F62B7915FDD7EF6E24B32BB172660300FEF8E112B4A7027D5C27C30F557C6D299F96FE3AABE926875B79C869FA2C2496031B07960373CB585F22EA5A0211033C7AAD7785631AFE573313C1A4FFB383EA99B7ED77A139F2EC394D655FDF87126D362C3F7A7EC07B00F3BA937C5561B3681CC9CD3D65E4DED0B2D5EF380DCFA4032938C25A6DAD433A77BFE3A9330833FCD27760B790D8F945AA4B0EC2D65BC860EB19D39F39924686B3B7973B2D8A13D4D5413B0D508BA9CBDC7E1E0573B096AD2B50E4505FD7E87C0E9A9BF62F266FC6DBDFE7A68AB7CE3B5C4E6FD379D03E3849D5141E48B574A5F98344F61F576A2221239ABEB49F80A4AB0DE4D0CDB7B7A62EAEE9735FE4F0DF77E21ACA0AE71FBD4C63DFC60A4ABB1EB03EB341BDC1E6200205235C5C64A8DF474BD6DEDBB8854318F17C9CB772DCD221A98A11A99F4F30F49A678EC844D231C790A37351166E5AFE984CD6FECB6B172B4D5B128A02E338A73C2922F9033AAD92FC0E2777762FF42942C37A4267E9013767FCEB9924628A42D26262A733078835DDCFEC4080C7D7E12E2F8CEB9E076EA67757F9EA56C326E0E063A6C6D2216516BC3F909B5FC2BE22AFA91E82D5E18A174447A892246A8692E68D238F0B49E71E9F0A2DFC1002BAE68AFBBFC7E62EDDDED5EAD4CE8FB61B1AB50BF2F2353EF800838E1F7438D76CD9A96AE789FE0706406E5495AE798068B26FE74CC60EA14961F94C046A7861DF05423F2BBF2BC865457FD0DF5A6B836584336FF4BB67C9E48278939842D57D8E36D3CE84CD10755D75DBD51E1BF85EEE72DA261FC6783BF554014542E6955FC9680E0864609081A47F7A198565D08B9190F3BF72F6B216C012A2C88C5C17A05F76CDAF1105A15C946E997A967C4C48E9D9CC6A20FEC25D9EACDD17D97F3693009D585E63AF842784D5C946F15C9A9795C8863E24EC8DE09CFB1B08E0E8CC5DE30A0A32B560DDAE8E05CBD24C7564F58BF0C26185512BB559F864FAB2671D6BF947B3E770D34A4B41959228AF0E8845A9A66C499C791BD0F659ED0855A5A82F7F8539F7C460006EA12A7042E45113011FD5653598040BFB9A66E4224165292BD31DB51140773E92096FEAF02F6F67A2B88A31239E5CC816D6611803C7E39492F870C39B000877852ACFAE2C71CD1523B3394495C441992655CC5A1FB25424A4D009FB38D19A9A7FDBA9CC708A770361B9E78330752BEFACFC36BFD1A1F75CF5F9095D057073890627CC77BB0C8B454CF221EFCDF2484C654EB0BB764AA2E303B8FB0932B130B9BDE70C429773C14FBFBDD5DCCA215EA52FABD4EE109B19CB71EBAF749306BE87AB35EBEB0A95E17544BCD8EE69AB7A47251A4022E6C1943CB273836EE35FA0EF7C21447DD0D7DDD755CF40DD372B7186013719A2E3DFC7A6193C27B9D0B9AAC8509ECD131E58C97C01532BB9C2DCEE07F9B87AC2415B9EEC7471E9A1B809967B6E172363F50D60B8D74117F1D5B1E4AF3E60D7162E3EB1DBA6089AA673EFBD86C5A44318D940A112B346AC05AD941DBFA03C7483BDA4EDCC7B79C8660F8860CEB294DE31207A91830E616EDF1B406C7281B263384B8A6D20BA3664E7991C202AC07A74F3F9D8CA115565FF594FA597B637C4558A492F1FB316431E37D3B2D300E77C2DD9166FAC32752F7CF968B2714B859B081357D3225CE017D6E67B7A2FFCD4CCEDBC2708FA6C3339BF4874706E5FC19599D34BB5E76028531D9402CA14A50792BF77BD8FA08E6C064E0E21C60F5436DA93DC25123E475D5F3541B4648E3BCE142C6A00887BB0941EC94C8D2657E1D8D5417732374BB9AADD4D2128F4C0FE9514241276A132556DF2A17CD9D8670AA52778730F5171B456146896234C60512D11C43800646BE1DB4DCF0D3D153EB7E0C9D09A9FEAE789170637689A9B67267E3A90C90DE6A95AC0FD2AEFC42B1C9543E73C050E803181B2115D77EDB5CF76582E6C136F8ACCC66E038609F27F3128EB451F2F158D198829796AFF6E5F3AA01D629E968641317374E681D598D128587953F8ACD748868442B2645B67C4491A0F896F1D7BFF2424DE5217E28B37116BB5AC9954BF00E4ADFEE73A5F87A852AE54F34A92AF051A82CEA8C1F9ADAC16AB2DBCEC53B98DDD74AA6811DE34A64E64844D8C5C51F17BC0AB1692205627C5DC9D46BF1A57162FABDA535C10917B2A986618A5E243AB0847D121CABD739097CC09340932AD30B73C552D7E903F81E4CD5290F6EC06A50187A573565F3061D8B1FB4AB48F319EC55AA4109AE1090A01BF22514578B60CA28A33617FB198411016815F95433DC778828299A70CBC69D58FBFBD85DF6578574E7BC22A069F4FA871775251C38BB7A487526B352F096BDB61A9741278B2D0951703BA788E9B8057D7A5699A9093701A4950B7FBC302043DEFFA9F44214FB232BE0946E6C265B37754E22292C9B25A00005B263D9176F35ED2A16899E5501BAFDE083550ADF9E06B634A8BB748BAF3493AB8B4B17FFAC2DF40602CC0F55E0E6DA02B5D7A3C06C5EBAF46B337975F4F1EA24EC4AA912AA8A77D4A7D8CD32603568EACDD87C33A887B08E689AD5D0B8536356C4210866F3F4EF632712F4914C5960CFBB3C5D374226FB1D331B4662BF57B355CAB76E18E79248A0E40E05912405104BE31215501BEEB08BA7052E3CB031619F47B65989780863E93C2C6452A12BD9760B31F38186F41C1189F8134FAF87489D07D00E9D9662953E9DD0D714553BB05A1E1C4F5E7F8B3D8AC04C1F8A0428197D201D1411665A273943590DDCE4A8A1AB1806FF1FE5634498220AA08B7712D656902DB5E0C1F0D4D6325015A99E6A47DAC279E2D74C4C1994E70089E140A258A3E81A80B9B33E4E142BCEE3426EDE56710D0659A93C42D6503F1EF0D9B29FCB0282EECA7FD67BB857A3DBCE8E72F112C42ADCC816E2B34BAEAAB58EE3FB022D53F22628E3D4A72DAB1B3B1579B546D5ECBFDC1A5E95C079FB0444427EA43BD216BF04F60276F838C74946556DC8888D1BC7013BE5BBFE172967248EBBAAE2E22A868BD322EA295AEDEC6E145F47083B34FD6B9BB6DBCD11CC4ECA184F5DD7DACD16D2236F4913889252833A62844775BDF49BB10DF28303F0B2572B2F58E907F634518CD1766DAAD9D50D93D3DD19E41E288876F35ED5C2B9F0D034C5445C0EF8005E79D5D88E1DDEE3054E11818BC72FA552E6EAF7AED3D9B9C345AE3FC4677D3DE29A9C9AFA32CE4E9081C39BDC6F152C5A83AD135AF2CE6EF1950B06F4DDCAEDB162E36606ADD5F9BBA2B43D79C171DB43D2F7A02A8DF88E70FD624CF8105706938815CF8546D827FF0F3A6DFDB7E1C363DB659A27477928C47C0FE165F3B029298672D05E2BFCF6B8872C3003DFCBFC9BAD5F691675E9719BB5417C924EB6AB7C1D4229277D04D321AF708BAEDA7E1463D8150A12A4D9F7466C905FAA3C1A55C1CF18706ECE7BE8E48F0FBBA9DE9FF523F18D025F112508740D1927F7AE3BA156642C1F25A9AEE21312DF248A35E99B9211BF7E7D2F14456A25306E16E74B70B866B805A50A767E4589BAC764BC3832E256BE2393254F8ADAE6A12951FFC4673CA472D13BE2D1BB76294B29AF65EE730261FB6B264DA08D49A882D9BE60307B05B30FA2BC9553B8B588600468B59A6B2BD78C9ECDB786E543628FF4614C3D578C68D7D8897B587CB424D939E946FDE807E08CB3E3A4985FD4351E2FF55427A9785F4996BC62144521DC1AC6B2465348C0AB85B78D0BB6D028E29E7FB3E26C7C4C78D1978B0A6C1509751BBDF4F7F56400E8ED7F5B170BC9EC4EAB02FFB1D52890548C67D7A89F979816F98E9C2D49D1D44CB5C296A6E2D5A405A8206D4FC98AC2DC1B10CE64C59946CC221730D3F9ADE411E1E2E3CC483B40B5F49668A2F57F4EBB8BC6ECDA13AFD2071138CF668CBA1E733804304E7D4F2AAEAC464C6045E22BDF453C429DFCBF891B8E054B783B7969340138082836E25F69F7EA9395267B9FFC168BB8AF1693F1C08EBF5F2E26804718CCD45D08B25970FEE818822121A9C20843ED590BD99853939A1FC5C3CE51AA6A514B6CD09A6FDDACF22A6537BDB118C0A9B3F71C25849E93C4BAF603E9565F765D0AED17B8B7FF55E3F976E0B9F97C22FB2B5743A179BDA4337A4CD178D39B0DCD4306A9715A71FF77852D76939D22F1FB680C54E3DFD20F3B6C39A140F12D049AA4690322AD03547CEEB4295A243335DA1E77196B1ABC0003704DFE7F39C2B4F751E8D838926F227B64357DD846D7B89105EACE6CB9E207C17DE40602187E7C7FBD598E2DCB43DDFEE879CA09051A896073E1A36BE8A698808D44E97B41E93B6D2213C141A60F18620A87BBE083237D4B21523EA4259E8B7B5E496D3B17C1D6EBBD55C013B26B1030F8B2D05D6DBEA9B24B8536478C789C02A1A36D2562DAB871140A0B01614D211593DADCF5CCF7E9F5A0AB99833B9EECF5441F5504FFA64D2DD6D6DB58C6054E5F5A618748A2EE5D29B04C6761A47D7ECDEE5AA826564E868134229A5ED766BD0E59C4CD26A495E6D9C9FC146CC812BB31D5D87A4DB8885892BAD4661CDACD397674AA7DE9ED3EAEE1844F0A2DB366EF238957F7EAFA963CE1FAC49305EC3CAF6BBE86BA1791469D4C59D12476B8A5C9B66AEFDAB0EDC0B1F9A38B2669CA40B108AD137E5D4516E44C03EF357C41F2DF56CC87F66E83BEB62DCE1F5AB4461BF6FA592812D2B009763FA0157FC1324928A306D5B141C850506294031F85108ED8642BAB988E02708AC0B7023CD034A480D5FE368410FF180AEC49F9968CBFACD44D88AF8194D9041BD0A22F19C5690527BBE17D7C5C806D707BDF31964147500EA37A1E1704B2BF68060380B6A9593F423D15D1BC5E3485931949A52A633E21CAC760A4F4A252C674D83BDF279F1F1B5979A2B2F976C2D38834F7CD114BA4B1F4B5100089B2F4A387EC1F4576D821F6D7699A5FFCE9CFD9E9BBB4503D100ECA99AE0E3A991620A4AB7E44AE1E65DE0F8E1E379C24F0E7FD524D7C32557965E16C7AB9BCBBCB75552FD5ACF091CB96873085BB50E113E73BE570161E32BFA3B1423A8EC0DBADE2C528C5BFF9B473E478D7C1533A3AE0039AC7E592E3651F32FF96C7E501B98EF4FEEB46B9EE5EE17FBD7D17785948DFCE5BA0FEEECBB03EDAF306A5CD3F689C4BA6951A0ADDDCBEC499856094B5B9E8C3DC1F0E7B93895B70E1D37EDE95D117626B837C572470B7BC003017F6834EC046D574E3D0DD9A50A1DB653B325D2E5B2419DAE90C88CD21BB2B29EE42BE5D04258ED4566DBE43678E5BC59BDBE28F3013B700F5B1E29D7AD3F8FAF8F9BA4F6CF72FF9E53E8117FA200B226C81EC5878EA22212A76C9FBAEB4E29464C1682357FCEC9F60BB365AE73FE94D44FFB5C11F06F1AB03A50AFA36B36BCBBF8263EAA9453D08A54EA78AD350333CD82DCD5567FF2ED2EEF3D51C000C85D8D3973849FE53C6796C343AD33BAFE38AD834F373793CD90D60DC89DB27AAD2D50C8AD5FA2079D0BB270F0C99580320F56208F5D0506C7197F773952386F9AA4472264B4BE09B5D9BEBCDE9F2CFA2A5DF02F43EF3EE2829EFB5749AD6079059892FE8C49D2A370E6A6DB3242938651DCF4155C9B8E23981584067FF47D9B77A6BACFBD2E67CAE027D0F903C3D6A9643EDC7E7DECE1E31135A35216EBF60243D97355CEB30A151D0AEFD802D5FA4F0FB890C452739205C783F91094FFC085CF61D35CE5418BDA972D959C6C6787CC8BC94967952D06443E69622D52DADDBA0BDF1FAB7844FB0E9DA607882D0A0A2D43725CDD1BCC0313226B40EAD18F7EB61B06B151B571CC39B60A82C74EEA8733BCAF557406407AA80022E66F176F3907F1AC839306ED9A4E6DF9A25FE1D915BD008E30F0093FA349A2161C909892D70ECFBA6BC677572BA03C3235A0D661308ABB0727F53B5BF34FA8BEA1CF6BE2758754C8C9AD0F9E9BCC08DB485B0CF176B825F46F383EAD40C99C72E4E9157D4EAB9ED60102808D4A726C3C2B472063D8D75BAAB1A820386788388D327B8461D18A072EFC313C7DDF79F2647E1CA0F57302C150E38CACB7B3196734536C6345F68CCC2687C48D24139386B3F9F3261EC41793E81E16DAB29E6975532BC1A86EB16E927E16A9F3152E6CE5C2CD9B53CB61DE9D23B5165EB5C802B7E0EB797BD85FCC581D1025C65F5955770939C0DA424A0E55816468A27B4BB54A390F34C39E6499B3594622427257A81717DF69762D9085A751074DEC3240C89CF3332C13C3A12F9EBEB4B6E2D6E2E60B5F7DFBEA62BAD00BBCA84FF8C74D48661B65B8B78A3A52D5879AC627572D6EFD2923AA063A57AC4F10CA8EA05C0EC6C129DC52DC3B4BB2C1347B67955688C8E63E3DC083C8549E0363FB47147F878CC4BAD866583F66D410B408851E1981FC5B604AF14083FFFA501F1D603C05E0FAFD474DB5F6066021529B66681F5E022F9B511D7051FF88017EC55D5AB940A2FCB01BF9A8728F585D491DB836B98324BE26DADF5246F0B76BB19C0DC65DE6906612221BADC8307377F5D49584F3B141EDDD47A72BC1588DA573A2DE32E81BA8979D873E207F3F5BFA7AF7B8B1ECD1EF0746EA4D88099B0617C71BA976FE490D981684E149CD08B4132E0516CD67E7F33BF5D5743F8217AA806DF29E3A46653F97CD1935C38868A2DD9C890F95F8F7916625144DAB20612380A2060F86700BFD545ACE4987BEB27F1825B607A3873E1716075215E66D95458C6E2E9F4372D629B9B65284CFCD08A6FB25CCCA66432A007054026C53E9E55B293937311A7DA225DF2630B83B60D504C9C7C456070E53411878090E7F53DDBC2F33B4F62CDD0B60A420F7BC8A1010A06AB1020FA7CD02F1E428F213C845DE01C2CE8F32723C128B74D7E2C2A6164BCE07B5E1312A0B9B7429BE09EA47CAF137C174B7BAF24EB592F1DC2154D3F635FA09EC0BCF814BE0596ED84504A658356A716E323C361107DE0A265F191E8855F13A2EC1AAA0218E6001851848A9FCF41234B96CEAADA439B0EC8BCBF49958D1D6D37491256D8FC3D5C86840BF3B0329EB4859782BCCCFA0E5B590B43FA95866E707692EB7882FA7FDFCFC2BA4EFF70EBB29268EA7C50A7069B8D6182B273901A6A8C01D283FAFF35DF4420EBC151C4DB2ACEF9D34F6B0F08FE20494A6F16755EFB5FCC5715F38B7EDB05D2FBF6A8EAD5D0293AAFB876856A843E03A88FA3036AB4F318EEC1A2528ADE7DCBCA5A404273C30EE6152BFF20D8C5B1246F590648E47E916F706CEF09202B5A343E69CA68051EC5063E6B7C19D2071BD3B88D542464D8084E972E7CF1193B592BC0093AC40C5B4B5F8A7E856E2BA41FC35C0D8185F6DC89BD85D15B1AE20D8BBBBDFBAA13BF86C7F6F92B621B8CBFD05C7C8D0E699B21E7B33ED66968FEC6DC4226533BA78941FC0BB30C1C2EEF4FC218FA5BB42DC85E4898290E8CC5829C09CAF004E82588926B00812C713C24738C3DFD332735E5EA977A93C35E0598154BF79583BED8108A1135513A4ADB4F15B1A2712278B1CE04356C2B720D86FC986256926BF54A26B4E065B54896EF68E71F03847ABB9456EEB4EF870F5AB1824BD6A9E73FBEAE065B6ACC651EAEE9B9A5D2B62BDAE9FDC0D6BCA49EE3141F8E3E7BDA9A36E2DE9E995C35B816A13E64AE3B609B3E2D2A44953E2C4DF186409AEEA6E334157C05103EC03F2F920DBDDBE78037D0280CE69033A2C0D2EE902AB411A2CB421D61E8347C2030EBF666AD66F7BC2209D224B64448A62454CE804AFDB53651D5080B9C1370061D3241CB07A0C7C0B749706A737521015B59D6DF8F2BB07378031715E66D7072BDEE23CA6BFA5E0F99D88A16E32BBF0C104D4ABBDB075AFF8963289EE834313DCD2DB9BFF037060E5DC15EC0E6E29D07BE02A32954F0A0936995EB21C80FB68ACEA2C2A457EEBEA25352534C3D0D51B45B2B570E9157647D61B8199BDDD814B9EA227A76A10C0ABB0B9E7EA5718EED61D4DF335E75412439A2F2C200AF1E0875D829F2978F4FFE746FFE3973804044A79F1C4566EEC8FF86BEECAA7058A451DEF75306CF1DCCAEE4AA8CC63CF26EEC5A8E424ED7C09A03905D53B59848E0ECE548E3DBBE9769E1AFD6A601ADA3581E924994D2970178C8F635586231337D11507B3FF201866415FA8C7129E839B55DB00FBBAD9ED6B861ED25315B9BE4D905041B71C34551CAD95A2454B1254D2CF4D1F2423C58A2C49BAAE5960EF23188C193C6A8F409240074D849792600A8D93B1B3B1B1458CA998AD862445D2599CF5F2571B516E5453ED620184F242D96CFB9B696184D59E04968D64C7E56EC442A6228EC8FF670E510E67A970A598F2190088C707359CF1279C3E7BA8704A310C6C28058CF7D4008D3122AC7219AD4489792F91D466E8970E4FDAA1E294965D807D711AA342381223E3C3EEED00812AFCE1C1B93147C2AB9D61A71E631CAF8D90402D31B21EB29AAD6E809F794461000182167F43FB7772AB1DD504CF0ED572B0637D84D1AF8D9D378CCB805B1B93949C8F8ACAB8FB0BFF86C380FD0BCE7EF530D4CF8C94BABC889D39EC04FAFE15CD328D7BD9DB1FDDBE60F0A37C36DD4E3E54B1CFBD601556997EB412677D9BBB49DF4934ABDB5718FC0382DFA1FE0E6E68CA67A79D52E75A4F69838D151BD37E976DC45C07E90E5425099D6B59C78A47F683AF4D8DCE98BC825056D6712AEBBF9D405AD2DA0989062C77743348F9831C6AFD5620DF2EC79946F31476B3D45B943F9896D7B4F0BF1DD762DB805BC2AAEEF8C7A4F0AFD1471FD18711396B2DC5117A2F21981F888448C23A7CE8A9F1BA238D7DF240E95E574927AECB8A857120B8C87C30DC1EB93907738E7148A17DC7900D2EE3131D7046B9F251EC02C9F4A938725EF17D59D163B509784FB6A95E3122860477CE2BDBBBB715755A9DF3A2B9628E160F5D576DB328BCD2614702A2858052BBD623CDB788260273793C2C621A1076C719B470813A8EC020BA08AD0A8EE7D14D50F5BEB4E4E7A0E3A31081FDB17006475525407D254810C856EA14BE6F11AEC4ABC1E6F7272FAA12B125B60CB3873922EA06098905548AD7A0B65E065C027C78CC10363BFE6E79BA8363647A93137DA56024250A9910F34E33D0BE72FD82D8C3C7CFA3033B87F97A6F749C0F043A4D71A79A2CEDEB344544DD68BF151C35F3AB1FE682F70094D39EB3C270160F9717299E15AFCD2B2BC4D5BCD38D65C14C5357693C05A3CA310D59403AB6D7A6856256920CEC78EE9B33541B2CB70E6723969C90F517A0115DA059134E4E30789998B131C8FB0FEBF88794B69425507B8905F1EF6438C4D65F41624CB6DC592980ED99287DB9272E3F281543A2501DD1A728D9B68E9275352888E664B773AE98E253DD87CB5EA1E0FB9B34F2F1051086DBCE599EBC080692216A5C288F5B7A0A206D64AE7A5359A6427E9C2C299212E67857A29F8E7D7880429F778BCB5C78DDDE9C43FBE71316254C8E546DEF00B7805065D8C5ED874CF00E6481BEC4C6E4DC11C29840F4C75571622340929CC1F13F40527BA78A0B1007958C514A01D50BEFB6743DBD94E4A3CB27A534BA68455B10B9898DD2CFF4102399EBD1DEAEDE3832BC7C777B744B73A98E419E4A3753405DE397DD3BF0DA05D17558EC6BBC79684B4A46F81580D6B5CC915B5BDF8FBD24A52A89BAF776174C125ECFBF38C1DC26BA40B3397CD26901490CBC25293AEE6BD51FBCB370ECFE27F71BA085B526DBA27A7812B47A2259BB4C8BC8F3758AA141E84DA6F68F339E00E54FD010BC4DB096D0B7B0799C725D5F6B95CAA90500B13341CDD70EE5F191988532043E2F3811F32D79A21824E7EBA757DF09C9728ED7546B46699AD379D7B2A93F0F81234675932EC30C372F2414531F8B8D019FE8C33A23A93943BBC9C2BD7D39D00A54D61546C3CA8D5C77356E20F633352F97E660419EE0322630FB9819604ABD8F60655DAA40ED74A57C22C1F5763B26CAC5766C5816A9F12A3855DBA1063307C34FA909CE05263D0EBF7631534B3D1D9BCF18BEB32C59673AEC88724132C11EBE2BB3C25EC06ADF6BE22E138385A868F468294E98AB941E5ECC981F311DC06145A511610D6AAF0CF02E02574D575CD0D7B68892169E5A37BF584F751A1FFA3CF45F7F7A772C593305BC6EF6DE4913B6B22DC4B9DB515ADAE1A9212F8FD93B09D2438E07BD678CD2562A06A6A2291EE4515EC7752D8A286D0DC88855183F781E0CB52765BDF261DEC23777F79AE25A42CBFCC38273DDD7F387232B133356A3064E0F04470AB2541AB9F6C0A8B8DD9F609A576E846D6896BD1488C4D3F391ECC19602D25D61D849F814B66019126A7039ADA949496996E80027B9A404C59D8F3101BEB932A5DDE52F58F87D50EC721FAF888C3C242FEEE0EFA5D0A8DA983206FE4337BEB0755424DB5497C99541E2E59E76E1E0E7183B89D39F7A4828E4A02AE00A193BB46352443B14793B62BC04ADA765D1F7819287F3FE382919AD5635D5065B095B92CEF6250F3D0A83AEAA5684D71BACC86ECF3C933B0ED67A9FC29C616C580240366BB5C89521CE108B9AA53E7F000388AF46ECF24A95B1351711AF6DE31840BADC29513EA09D73277580EABC44F3B4CA351246294B0A284DC6358CC8DD40575D837BA61557BA2C122D6F569A3CA8DEC650927ED49B0CC34EFB529DE088B9C70C8902F3E96EA92080576E8FF14F1AC6230648D80D3C29977B21D7897A1A8BCC9B1913A1195C8AFD4138853F9AA43621D92BBEEED6B02FC9D6A4151EB937F262E3F0BE718333B760FF6020638E02E0CBF5BEEE8F4D7BE9AE89D6268947ACC72A4038384DD7DEA58599783B5BBC0E71C7C32E89B7F0CBC4E4A372B93E5DA968D5255A225B62CC03974A4C078FA918D98C9C0CB2EEFAFC3A8FA4E524C2A2A9C35944A92215D9A32F27D3A984BC9FD59985BDE574878C84369D882193097EEE47F61D3C89394ACE8CFFA529D8FD48197CB734911978F29ED089C081782CADDB552052990D9DA5B0011B0B67187A8258CF37FCB934D66724430DAE35BA8DC1AA9E9230EBF192FCD056C4E8148DC49B9846408E32E9E76AFE040D6E9C8AD00F65D551199ADB7E52FB58BEC7FA41A5E1EB389EE4C9B4320F1A2C9247D50BEB4CFD7F977826FE08CD1F58851F4C431E45DA05FFB0628FA54698A141E2BF6AD8201570C4F32C203E11919740F873AF47C8C89F8BDA5360355E2E89A2095987150EE301B2105EA53D1604CD56D72CD9D43BF1CFAB91740A47BA0A389A34FF5A4409CEE84A283EF4694D05822243035473693B11EE62FE4A71B01DD4619A1E104237AC3FB97864A19CCC54049E43321732E0947B17A91B7D76B68DBE5A14A66F2743240090D810E49BB5F062AB57CB98469B8461610D79C86835042B38DC447F6F1ADFF88DA6A181B8932EB1A1D070D43A1994B410D0F770A678BBAADAF988739B4A7EE287D059415964DC5611C6ADB5BB4ECF03D66E7EC3B240AF70680C49609E574B8EE3B756B83E0079ABCF728C6DEDEFAFBA8AA22C5F7FEBA9BA50E4D4459FDE1D5B09E68D9F378448BDBD2833DBE82B7093264301E9FAD50ECA4C56EEE3E9647B59A344863B9062148E41AD16B5580814722C5026497A50451D2FB122073C93875ABAA28F66C5C409EEEC0A9F9DE1E87A4D0A67B70C977A6AF3257758FD6216DB5383279BE671C237D874472C4F9848E572CD80AB4233D8A4F7AFF2266E81BC8136937A897496D40B92F8E0A882BC1248B36BC579D1413287F95A0BDD55136A005B767389E75BED020DB99AE0B5B627580833810B813A87E7A223D2C405A92A7DF75080084939C7C0073F1519957A04C7FBFF3362418D88A21F2D023A572241809449D8CC30D96610A54F7FF654D14067825E48A18215966E68DC3319AAA7405899CDEE4B4932F1FAECE000B1952016A52092EE21BAF77DFFAAE2AB2CD38EFF5564A0023D397E8DD54A64014CFDE2CBB824F52928246E39B2DC3DC5BF8F8C4251AEC47A137D24F82A0968136CD4E4777A4F1AC3F86F18A18176E534C2CE65B154D77F3B26CBD277EC1C9B0DD9761E48B887C43AEFFBB89182F065EBDA3A54F450DB26F233F199BF1325F381548BC03025B93E36D633623552317A4CE8CFB014239B8DEF52268810EB1EF2957C9662962426B917B23F8CF8050DEF70CD353BB60E17AEE1E1571B3EF09003926214C0653214E4632011A5AEF8ECD78A192395BD0793BFF32A1C06F567D8E85FC00BEB034F118FF242CB809759C0D8652B4E298DFAE129A42D723CFFFBB8C3659AAF06CBA82BD1ABC4373E14E4DF780C02CA1D39A366B375F8B2E49843B5CE4F69B7A05C54FC108B072F2EA25569A5F887C7373237D8655822DB848F37F58D37496D9B3FF6FBE47BBE45C937FF1390F365A74D96293F7DED0E55CD09C304DFEFC45EC9801B0E2B31DC8DF172DDBCAA630E268E0FA5924E17466F92EBB49FBF0B04577C5F5406E25CBE52D028C1C77690A4433ED957CCA92871132C4EE809672E740A3D20B75385F5F9CFAB4A9EC2199DEA7618FF87379AAC5A6EFD4BDFE480085AD7C0A33832A4D31B37F089C77D818A7F19FB1766F130508AADA6F8AE3AD17F9F97220E25AC0921F0CFAF6A0B864DFB31B405AAEB8519CBA18E361B0AA5551AA10D979ED268E69F0B32C59D7B2C039AE1CB9FBA9DE3ECDCBD1BD3ABD62454BDBC16906AE3CB8CF5E32D9B2A23C99DDD1B02455CCB7BAEECD485E61F4DD766352FCBEA8FADA79062F444B0F0C42D3CB45E9C1E22714F83745BA8338917255424EBCD92EB64A9C60E45AD0EDB1DA0403BF1771DE23CC00F75B1C2A53799E4135913F9DDAF3A80661F256383E19D0F701D7873AD090B12E17777416B950E611598D5C537AF4E02A2983F2586D71392B1AC07AC6AE8ECBB1F7640F4E3B22948B94FBD126117E2293372D3C89811DA252924105E38FE62F0D9220579ED80D8EEE626703A80F506F5E763252294794C8D29825C304E9B9BE99F062A61432AF59696E79DE4B1CB6B0BD992248188D6963470683CEBE5FA9FF02F57C87840F2E85A1FA0A94E96B7B2475CEFAC13D719282FFEF8C0C4C2AD561C66E334105F42A1B2F1F4C673DAAC0D660B81C59FFBC36137C0AD2AC0C00592ABA81977172C2F97A20D286146872764CECC0B650CD51A1C4F6DB15AB009A256F855C15BCEA71DCEA73C248386D577E789BB5777896A5210DD7BE2D3F4EC35996223F333D51D22F7E9F02FEAEB47CB49381B6A75D514FF0553DB48B69C0F97CF462D1BA8BCD60BC750A83461C8BBE6376C974001477A368657B066136459E3D4E68C9468C492C9D14935C90A8A06AE69F30C1DEF0846029F798BB82E46EB594342BE26E41F5C96E0009EBC08A8888752F886AA78C7A6BEE11CED779D8F237716CF7210C10C459B8A7B1B7F6223CB268AF376C793F5D9C35130C7069272AF34CD5EC704FA4EC9AC0D5C433AE42977C68BAB56C8717B79A0099758CB49095F94C8C7E7FA4C16A10418FEE42D3BDD96F5530128CB2F816CA456ADFDA8DF056A3CF5BF3FC9ACC7B35A98F} err="Tx already exists in cache"
    
    opened by yuomii 35
  • light: rpctest.Tendermint instance's clock drifts +7min

    light: rpctest.Tendermint instance's clock drifts +7min

    Discovered in: https://github.com/tendermint/tendermint/pull/4487

    I think it's because we're stripping the monotonic part (see types/time/time.go) & using only a single instance (so not using medium time really). But it would be good to confirm this.

    T:bug T:test 
    opened by melekes 34
  • sync: Sync current state without full replay for Applications

    sync: Sync current state without full replay for Applications

    We want to be able to sync the current state without having to replay all transactions in the blockchain.

    This can be done securely by first syncing a light client to a recent state root, and then polling peers for the pieces of the state tree.

    Let's add a new state-sync reactor to Tendermint to handle this. It should use a new ABCI connection and message to ask the app what to ask other peers for - alternatively, there may be a case for it to just use the existing Query connection and message. The base of this could be thought of as a general purpose mechanism for letting apps control the fetching of data from Tendermint peers

    C:sync T:perf P:High 
    opened by ebuchman 33
  • cs.wal growing without bound on gaia-8001

    cs.wal growing without bound on gaia-8001

    https://github.com/cosmos/cosmos-sdk/issues/2123

    cs.wal is 15GB on my node

    opened by zmanian 31
  • tx indexing (Refs #237)

    tx indexing (Refs #237)

    • save transactions to blockstore

    • move to a separate module

    • benchmark KVIndexer

    • batch write transactions

    Benchmarks:

    Using golevelDB SetSync:

    BenchmarkKVIndexerIndex-2         100000            516300 ns/op
    PASS
    ok      github.com/tendermint/tendermint/blockchain/tx  56.506s
    
    5,16 s for 10000 transactions
    1 s for 2000 transactions
    

    Using golevelDB Set:

    BenchmarkKVIndexerIndex-2       h 3000000             8622 ns/op
    PASS
    ok      github.com/tendermint/tendermint/blockchain/tx  34.210s
    
    86 ms for 10000 transactions
    16 ms for 2000 transactions
    

    Using golevelDB Batch:

    BenchmarkKVIndexerIndex1-2               5000000              7160 ns/op
    BenchmarkKVIndexerIndex500-2               20000           1750411 ns/op
    BenchmarkKVIndexerIndex1000-2              10000           3573973 ns/op
    BenchmarkKVIndexerIndex2000-2               5000           7836851 ns/op
    BenchmarkKVIndexerIndex10000-2              1000          33438980 ns/op
    PASS
    ok      github.com/tendermint/tendermint/blockchain/tx  209.482s
    
    7,8 ms for 2000 transactions
    
    • [state] write test for ApplyBlock
    opened by melekes 29
  • Tendermint node restart after app failure sometimes doesn't work

    Tendermint node restart after app failure sometimes doesn't work

    I have 4 nodes running. Each of them is mapped to tmsp app. In one of the tmsp app tree got corrupted and merkle root hash was different. All the other nodes started giving following warning

    NOTE[01-03|09:31:42] enterNewRound(64429/20). Current: 64429/19/RoundStepPrecommit module=consensus
    WARN[01-03|09:31:43] enterPrevote: ProposalBlock is invalid   module=consensus error="Wrong Block.Header.AppHash.  Expected 7820B976E6E7FC55A9124B7D94B6F31E8FFE0179, got 87A01D3C30FAA6F239AC114F6D24840447106690"
    NOTE[01-03|09:31:54] enterNewRound(64429/21). Current: 64429/20/RoundStepPrecommit module=consensus
    

    After this, we are not able to produce any new block. The system is never able to recover. We need to reset everything and start it from scratch.

    T:bug 
    opened by surajprak 28
  • internal/libs/autofile: continuously .Sync instead of opening and closing every second

    internal/libs/autofile: continuously .Sync instead of opening and closing every second

    This change modifies autofile to no longer close and open the same file every 1 second but instead to open a single file and then continuously invoke .Sync, and if for example the file no longer exists, it'll open again. The premise for this change is that the prior requirements were built to allow for easy log rotation, but also durability thus wrote the same file to disk, closed it then reopened it every 1 second, but unfortunately that consumes a whole lot of file descriptors which on many systems aren't recycled fast enough. The prior assumption was also fallacious and unrealistic because most log rotation happens periodically say 1 hour, or when a file/directory has reached a threshold of which that would take time and not in 1 second durations.

    This conservative approach shows good results with the number of files opened and closed in my custom instrumented Go build, where I track and count open vs closed files every 2 seconds.

    Once we combine this change with https://github.com/tendermint/tendermint/pull/7327, it ensures that there is only .Sync on a need to basis and avoids burning unnecessary resources.

    Thanks to Tharsis who paid attention to their customers' reports and then commissioned me to help resolve these problems.

    Fixes #7332

    opened by odeke-em 0
  • internal/libs/autofile: autofile opens and closes too many files and can due to slow file descriptor reuse can cause resource overload

    internal/libs/autofile: autofile opens and closes too many files and can due to slow file descriptor reuse can cause resource overload

    Background

    Autofile's purpose is to allow files to still be written to even if that file gets deleted say by log rotation. The problem though is that autofile opens and creates files every 1 second -- this means 86,400 files every day (24hr)

    Problem

    On some systems, it takes a while to get file descriptors recycled say maybe like 3 seconds or even more; if a chain has many peers that'll also consume many file descriptors and essentially receiving lots of messages could cause issues and DDOS vector. Writing to disk every 1 second is quite inefficient and many chains have had to advise folks to upgrade their ulimit to move than 4,096. Tharsis has had reports from their customers talking about heavy disk usage and relayed this to me and tasked me with helping resolve this. We have such at and when I instrumented the Go standard library to examine file descriptor usage I saw this within a few seconds using tharsis/evmosd

    1:20AM INF committed state app_hash=7727D9FA3AB8880907B5D4705D2DCEF7FE59B72D303F5DCAE510160A9A224857 height=1825 module=state num_txs=0 server=node
    1:20AM INF indexed block height=1825 module=txindex server=node
    file.close 0xc0024c1500 github.com/tendermint/[email protected]/libs/autofile/autofile.go github.com/tendermint/tendermint/libs/autofile.(*AutoFile).closeFile 123 
    OpenFile.file: 0xc001a2e890 github.com/tendermint/[email protected]/libs/autofile/autofile.go github.com/tendermint/tendermint/libs/autofile.(*AutoFile).Write 135 
    file.close 0xc0019dd800 github.com/tendermint/[email protected]/libs/autofile/autofile.go github.com/tendermint/tendermint/libs/autofile.(*AutoFile).closeFile 123 
    OpenFile.file: 0xc003ec7200 github.com/tendermint/[email protected]/libs/autofile/autofile.go github.com/tendermint/tendermint/libs/autofile.(*AutoFile).Size 184 
    OpenFile.file: 0xc003ec7208 github.com/tendermint/[email protected]/libs/autofile/group.go github.com/tendermint/tendermint/libs/autofile.(*Group).readGroupInfo 363 
    file.close 0xc002552900 github.com/tendermint/[email protected]/libs/autofile/group.go github.com/tendermint/tendermint/libs/autofile.(*Group).readGroupInfo 410 
    file.close 0xc0025528a0 github.com/tendermint/[email protected]/libs/autofile/autofile.go github.com/tendermint/tendermint/libs/autofile.(*AutoFile).closeFile 123 
    OpenFile.file: 0xc003ec7218 github.com/tendermint/[email protected]/libs/autofile/autofile.go github.com/tendermint/tendermint/libs/autofile.(*AutoFile).Sync 153 
    file.close 0xc002552960 github.com/tendermint/[email protected]/libs/autofile/autofile.go github.com/tendermint/tendermint/libs/autofile.(*AutoFile).closeFile 123 
    OpenFile.file: 0xc003ec7220 github.com/tendermint/[email protected]/libs/autofile/autofile.go github.com/tendermint/tendermint/libs/autofile.(*AutoFile).Sync 153 
    1:20AM INF Timed out dur=4973.236 height=1826 module=consensus round=0 server=node step=1
    

    Problem statement

    The purpose and motivation for autofile is to handle even deletion or moves. Moreover it is impossible to imagine a log rotation that rotates the same file every 1 second -- this defeats the purpose, at that point that should all just be buffered in memory. Log rotation usually gets triggered when files/directory hit a size quota after being watched, or periodically say 1 hour. Thus the base assumptions for autofile are very off.

    Suggestion

    We can simply do this in a few ways like:

    • create a single file that'll be .Sync'd per refresh period
    • if writes fail, check for the error and if invalid, create the file and try again, but for every duration
    • to handle moves, we could potentially stat the file and if non-existent, create the file again
    • increasing that refresh period from 1 second to even higher given that the expectations are unrealistic for log rotation to happen every 1 second
    opened by odeke-em 0
  • internal/libs/autofile: only invoke closeFile if there was a Write

    internal/libs/autofile: only invoke closeFile if there was a Write

    Noticed from tharsis/evmosd and after I instrumented file opens and closes, that every second autofile was ALWAYS closing and reopening. However, this happened even in the case of NO writes. This change adds a state variable that just records the number of writes until the next .close, this ensures that we don't burn resources unnecessarily. Sending many requests to tharsis/evmosd showed a need for a ulimit increase given that some systems don't reuse file descriptors fast enough, and required some decay period. This change curtails the unnecessary work and will reduce the unnecessary system calls and opens.

    opened by odeke-em 3
  • privval: use single file then Seek instead of open+close successively

    privval: use single file then Seek instead of open+close successively

    This change is an action after noticing the number of files opened and closed almost every second in Tendermint while examining Tharsis' evmosd which when examining their Transactions Per Seconds noticed that there are so many files opened and closed successively. I instrumented my custom Go tree and saw so many of these calls which I exhibit in https://www.youtube.com/watch?v=qd-dxn56n10

    With this change, we should get a reduction on the number of files open which eventually mitigates out a DDOS vector that was reported in tharsis/ethermint. The problem is that some operating systems take a while to recycle file descriptors so a process could run out file descriptors if many peers/clients connect to fast, then retry and stay in a state of continual retry.

    The benchmark results for CPU time used show an increase but that's hidden/misleading because the prior code just created files and closed them just as fast, and the new code Seeks to the beginning, writes and invokes .Sync.

    $ benchstat before.txt after.txt
    name              old time/op    new time/op    delta
    FilePVSignVote-8    1.68ms ±18%   19.17ms ± 8%  +1042.36%  (p=0.000 n=20+20)
    
    name              old alloc/op   new alloc/op   delta
    FilePVSignVote-8    10.6kB ± 0%     6.6kB ± 0%    -37.61%  (p=0.000 n=20+19)
    
    name              old allocs/op  new allocs/op  delta
    FilePVSignVote-8       152 ± 0%       109 ± 0%    -28.29%  (p=0.000 n=20+20)
    

    Go doesn't have resources for measuring non-GC/RAM resources like file descriptors, but on examining a process externally less file descriptors are used.

    opened by odeke-em 0
  • internal/libs/protoio: optimize MarshalDelimited by plain byteslice allocations+sync.Pool

    internal/libs/protoio: optimize MarshalDelimited by plain byteslice allocations+sync.Pool

    Noticed in profiles that invoking *VoteSignBytes always created a bytes.Buffer, then discarded it inside protoio.MarshalDelimited. I dug further and examined the call paths and noticed that we unconditionally create the bytes.Buffer, even though we might have proto messages (in the common case) that implement MarshalTo([]byte), and invoked varintWriter. Instead by inlining this case, we skip a bunch of allocations and CPU cycles, which then reflects properly on all calling functions. Here are the benchmark results:

    $ benchstat before.txt after.txt
    name                   old time/op    new time/op    delta
    VoteSignBytes-8           705ns ± 3%     573ns ± 6%  -18.74%  (p=0.000 n=18+20)
    CommitVoteSignBytes-8    8.15µs ± 9%    6.81µs ± 4%  -16.51%  (p=0.000 n=20+19)
    
    name                   old alloc/op   new alloc/op   delta
    VoteSignBytes-8            792B ± 0%      600B ± 0%  -24.24%  (p=0.000 n=20+20)
    CommitVoteSignBytes-8    9.52kB ± 0%    7.60kB ± 0%  -20.17%  (p=0.000 n=20+20)
    
    name                   old allocs/op  new allocs/op  delta
    VoteSignBytes-8            13.0 ± 0%      10.0 ± 0%  -23.08%  (p=0.000 n=20+20)
    CommitVoteSignBytes-8       140 ± 0%       110 ± 0%  -21.43%  (p=0.000 n=20+20)
    

    Thanks to Tharsis who tasked me to help them increase TPS and who are keen on improving Tendermint and efficiency.

    opened by odeke-em 0
  • ci: add CIFuzz integration

    ci: add CIFuzz integration

    Add CIFuzz workflow action to have fuzzers build and run on each PR. This is a service offered by OSS-Fuzz, on which tendermint already runs.

    Signed-off-by: David Korczynski [email protected]

    opened by DavidKorczynski 0
  • indexer: fix missing tx/block indexing

    indexer: fix missing tx/block indexing

    The indexer might not finish the indexing when terminating the node.

    1. Handle blockHeadersSub.Cancelled event in the goroutine of the indexer service.
    2. Re-index the block/tx events when replaying the final block.

    Closes #7312

    opened by JayT106 0
  • Isue

    Isue

    https://github.com/binance-us/binance-official-api-docs/issues/73

    opened by remik2212 0
  • Performance improvements for the event query API

    Performance improvements for the event query API

    Rework the implementation of event query parsing and execution to improve performance and reduce memory usage.

    Previous memory and CPU profiles of the pubsub service showed query processing as a significant hotspot. While we don't have evidence that this is visibly hurting users, fixing it is fairly easy and self-contained.

    Updates #6439.

    Structure

    • Move the existing query implementation to the oldquery subdirectory. This can probably be deleted before merging.
    • Add a syntax subpackage providing a lexical scanner and parser to replace the generated PEG parser.
    • Pre-compile the query to avoid repeated syntax traversal and allocations during matching.
    • Update usage in the rest of the repository.

    Benchmarks

    Typical benchmark results comparing the original implementation (PEG) with the reworked implementation (Custom):

    TEST                        TIME/OP  BYTES/OP  ALLOCS/OP  SPEEDUP   MEM SAVING
    BenchmarkParsePEG-12       51716 ns  526832    27
    BenchmarkParseCustom-12     2167 ns    4616    17         23.8x     99.1%
    BenchmarkMatchPEG-12        3086 ns    1097    22
    BenchmarkMatchCustom-12    294.2 ns      64     3         10.5x     94.1%
    
    opened by creachadair 2
Releases(v0.35.0)
Owner
Tendermint
Bringing simplicity, security, and speed to the world's blockchains.
Tendermint
⟁ Tendermint Core (BFT Consensus) in Go

Tendermint Byzantine-Fault Tolerant State Machines. Or Blockchain, for short. Branch Tests Coverage Linting master Tendermint Core is Byzantine Fault

Tendermint 4.5k Dec 1, 2021
Tendermint Core is a Byzantine Fault Tolerant (BFT) middleware that takes a state transition machine

Tendermint Core is a Byzantine Fault Tolerant (BFT) middleware that takes a state transition machine - written in any programming language - and securely replicates it on many machines.

null 0 Nov 24, 2021
DEPRECATED (moved to tendermint/tendermint): Golang P2P library

tendermint/go-p2p tendermint/go-p2p provides an abstraction around peer-to-peer communication. Peer/MConnection/Channel Each peer has one MConnection

Tendermint 120 Jun 4, 2021
Baseledger core consensus for running validator, full and seed nodes

baseledger-core Baseledger core consensus client for running a validator, full or seed node. ⚠️ WARNING: this code has not been audited and is not rea

Baseledger 12 Nov 19, 2021
Frontier Chain is a blockchain application built using Cosmos SDK and Tendermint.

Frontier Chain Frontier Chain is a blockchain application built using Cosmos SDK and Tendermint. Setup Initialize the blockchain with one validator no

Frontier 12 Nov 26, 2021
OmniFlix Hub is a blockchain built using Cosmos SDK and Tendermint and created with Starport.

OmniFlix Hub is the root chain of the OmniFlix Network. Sovereign chains and DAOs connect to the OmniFlix Hub to manage their web2 & web3 media operations (mint, manage, distribute & monetize) as well as community interactions.

OmniFlix Network 8 Nov 25, 2021
Tendermint на базе ГОСТ криптографических функций.

Tendermint Byzantine-Fault Tolerant State Machines. Or Blockchain, for short. Branch Tests Coverage Linting master Tendermint Core is Byzantine Fault

[#571] 2 Sep 23, 2021
demochain is a blockchain built using Cosmos SDK and Tendermint and created with Starport.

demochain demochain is a blockchain built using Cosmos SDK and Tendermint and created with Starport. Get started starport chain serve serve command i

Tomasz Zdybał 1 Nov 24, 2021
planet is a blockchain built using Cosmos SDK and Tendermint and created with Starport.

planet planet is a blockchain built using Cosmos SDK and Tendermint and created with Starport. Get started starport chain serve serve command install

Andrei Ivasko 0 Oct 31, 2021
tendermint private key provider experiment that wraps cosmovisor and passes the priv key via named pipe.

ssm-cosmovisor You probably don't want to use this and do so at your own risk. This is very experimental and completely untested. It will likely: set

Todd G 0 Nov 5, 2021
loan is a blockchain built using Cosmos SDK and Tendermint and created with Starport.

loan loan is a blockchain built using Cosmos SDK and Tendermint and created with Starport. As a borrower you post a request for a loan and specify the

Denis Fadeev 7 Nov 9, 2021
Golang implementation of the Raft consensus protocol

raft raft is a Go library that manages a replicated log and can be used with an FSM to manage replicated state machines. It is a library for providing

HashiCorp 5.3k Nov 27, 2021
A phoenix Chain client based on the go-ethereum fork,the new PoA consensus engine is based on the VRF algorithm.

Phoenix Official Golang implementation of the Phoenix protocol. !!!The current version is for testing and developing purposes only!!! Building the sou

g_master 9 Oct 19, 2021
Rei chain fork from quorum using raft consensus

GoQuorum is an Ethereum-based distributed ledger protocol with transaction/contract privacy and new consensus mechanisms. GoQuorum is a fork of go-eth

Moon Rhythm 9 Nov 20, 2021
A phoenix Chain client based on the go-ethereum fork,the new PoS consensus engine is based on the VRF algorithm.

Phoenix Official Golang implementation of the Phoenix protocol. !!!The current version is for testing and developing purposes only!!! Building the sou

null 7 Aug 28, 2021
Ethereum 2.0 node multiplexer between consensus and execution

The Minority Client Run the minority client! ~Danny Ryan and/or Tim Beiko As of writing, Ethereum has multiple client implementations, but Geth / go-e

Péter Szilágyi 57 Nov 25, 2021
EVM-compatible chain secured by the Lachesis consensus algorithm.

ICICB-Galaxy EVM-compatible chain secured by the Lachesis consensus algorithm. Building the source Building galaxy requires both a Go (version 1.14 or

null 2 Oct 7, 2021
The TinyKV course builds a key-value storage system with the Raft consensus algorithm.

The TinyKV Course The TinyKV course builds a key-value storage system with the Raft consensus algorithm. It is inspired by MIT 6.824 and TiKV Project.

null 0 Nov 8, 2021
The TinyKV course builds a key-value storage system with the Raft consensus algorithm.

The TinyKV Course The TinyKV course builds a key-value storage system with the Raft consensus algorithm. It is inspired by MIT 6.824 and TiKV Project.

jaegerwang 1 Nov 19, 2021
rgkv is a distributed kv storage service using raft consensus algorithm.

rgkv rgkv is a distributed kv storage service using raft consensus algorithm. Get/put/append operation High Availability Sharding Linearizability Tabl

null 3 Nov 25, 2021
A naive implementation of Raft consensus algorithm.

This implementation is used to learn/understand the Raft consensus algorithm. The code implements the behaviors shown in Figure 2 of the Raft paper wi

Martin 0 Nov 28, 2021
The TinyKV course builds a key-value storage system with the Raft consensus algorithm

The TinyKV Course The TinyKV course builds a key-value storage system with the Raft consensus algorithm. It is inspired by MIT 6.824 and TiKV Project.

ytt 0 Nov 28, 2021
Baxos : a DDoS resistant consensus protocol based on Synod-Paxos

Baxos is a DDoS resistant consensus protocol based on Synod-Paxos. Baxos uses the Mage build tool. Therefore it needs the mage command to be installed

Baxos 0 Dec 5, 2021
Slack bot core/framework written in Go with support for reactions to message updates/deletes

Overview Requirements Features Demo The Name Concepts Create Your Own Slackscot Assembling the Parts and Bringing Your slackscot to Life Configuration

Alexandre Normand 48 Nov 30, 2021
A Go client for Google IoT Core

IoT A simple framework for implementing a Google IoT device. This package makes use of the context package to handle request cancelation, timeouts, an

Andrew Young 54 Nov 24, 2021
Flamingo Framework and Core Library. Flamingo is a go based framework for pluggable web projects. It is used to build scalable and maintainable (web)applications.

Flamingo Framework Flamingo is a web framework based on Go. It is designed to build pluggable and maintainable web projects. It is production ready, f

Flamingo 241 Nov 26, 2021
Eudore is the core of a golang lightweight web framework.

Eudore eudore是一个golang轻量级web框架核心,可以轻松扩展成一个技术栈专用框架,具有完整框架设计体系。 反馈和交流请加群组:QQ群373278915。 Features 易扩展:主要设计目标、核心全部解耦,接口即为逻辑。 简单:对象语义明确,框架代码量少复杂度低,无依赖库。 易用

null 70 Nov 4, 2021
EditorConfig Core written in Go

Editorconfig Core Go A Editorconfig file parser and manipulator for Go. Missing features escaping comments in values, probably in go-ini/ini adjacent

EditorConfig 87 Nov 24, 2021
Package git provides an incomplete pure Go implementation of Git core methods.

git Package git provides an incomplete pure Go implementation of Git core methods. Example Code: store := git.TempStore() defer os.RemoveAll(string(st

Daniel Skinner 26 Sep 8, 2020